All Downloads are FREE. Search and download functionalities are using the official Maven repository.

package.dist.mermaid.js Maven / Gradle / Ivy

Go to download

Markdown-ish syntax for generating flowcharts, mindmaps, sequence diagrams, class diagrams, gantt charts, git graphs and more.

The newest version!
"use strict";
var __esbuild_esm_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 __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
  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/[email protected]/node_modules/dayjs/dayjs.min.js
  var require_dayjs_min = __commonJS({
    "../../node_modules/.pnpm/[email protected]/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", f3 = "quarter", h2 = "year", d2 = "date", l2 = "Invalid Date", $3 = /^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/, y5 = /\[([^\]]+)]|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, M2 = { 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") }, m2 = /* @__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: m2, z: /* @__PURE__ */ __name(function(t5) {
          var e4 = -t5.utcOffset(), n3 = Math.abs(e4), r3 = Math.floor(n3 / 60), i3 = n3 % 60;
          return (e4 <= 0 ? "+" : "-") + m2(r3, 2, "0") + ":" + m2(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: h2, w: o2, d: a2, D: d2, h: u2, m: s2, s: i2, ms: r2, Q: f3 }[t5] || String(t5 || "").toLowerCase().replace(/s$/, "");
        }, "p"), u: /* @__PURE__ */ __name(function(t5) {
          return void 0 === t5;
        }, "u") }, g2 = "en", D3 = {};
        D3[g2] = M2;
        var p3 = "$isDayjsObject", S3 = /* @__PURE__ */ __name(function(t5) {
          return t5 instanceof _2 || !(!t5 || !t5[p3]);
        }, "S"), w3 = /* @__PURE__ */ __name(function t5(e4, n3, r3) {
          var i3;
          if (!e4) return g2;
          if ("string" == typeof e4) {
            var s3 = e4.toLowerCase();
            D3[s3] && (i3 = s3), n3 && (D3[s3] = n3, i3 = s3);
            var u3 = e4.split("-");
            if (!i3 && u3.length > 1) return t5(u3[0]);
          } else {
            var a3 = e4.name;
            D3[a3] = e4, i3 = a3;
          }
          return !r3 && i3 && (g2 = i3), i3 || !r3 && g2;
        }, "t"), O2 = /* @__PURE__ */ __name(function(t5, e4) {
          if (S3(t5)) return t5.clone();
          var n3 = "object" == typeof e4 ? e4 : {};
          return n3.date = t5, n3.args = arguments, new _2(n3);
        }, "O"), b2 = v3;
        b2.l = w3, b2.i = S3, b2.w = function(t5, e4) {
          return O2(t5, { locale: e4.$L, utc: e4.$u, x: e4.$x, $offset: e4.$offset });
        };
        var _2 = function() {
          function M3(t5) {
            this.$L = w3(t5.locale, null, true), this.parse(t5), this.$x = this.$x || t5.x || {}, this[p3] = true;
          }
          __name(M3, "M");
          var m3 = M3.prototype;
          return m3.parse = function(t5) {
            this.$d = function(t6) {
              var e4 = t6.date, n3 = t6.utc;
              if (null === e4) return /* @__PURE__ */ new Date(NaN);
              if (b2.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($3);
                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();
          }, m3.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();
          }, m3.$utils = function() {
            return b2;
          }, m3.isValid = function() {
            return !(this.$d.toString() === l2);
          }, m3.isSame = function(t5, e4) {
            var n3 = O2(t5);
            return this.startOf(e4) <= n3 && n3 <= this.endOf(e4);
          }, m3.isAfter = function(t5, e4) {
            return O2(t5) < this.startOf(e4);
          }, m3.isBefore = function(t5, e4) {
            return this.endOf(e4) < O2(t5);
          }, m3.$g = function(t5, e4, n3) {
            return b2.u(t5) ? this[e4] : this.set(n3, t5);
          }, m3.unix = function() {
            return Math.floor(this.valueOf() / 1e3);
          }, m3.valueOf = function() {
            return this.$d.getTime();
          }, m3.startOf = function(t5, e4) {
            var n3 = this, r3 = !!b2.u(e4) || e4, f4 = b2.p(t5), l3 = /* @__PURE__ */ __name(function(t6, e6) {
              var i3 = b2.w(n3.$u ? Date.UTC(n3.$y, e6, t6) : new Date(n3.$y, e6, t6), n3);
              return r3 ? i3 : i3.endOf(a2);
            }, "l"), $4 = /* @__PURE__ */ __name(function(t6, e6) {
              return b2.w(n3.toDate()[t6].apply(n3.toDate("s"), (r3 ? [0, 0, 0, 0] : [23, 59, 59, 999]).slice(e6)), n3);
            }, "$"), y6 = this.$W, M4 = this.$M, m4 = this.$D, v4 = "set" + (this.$u ? "UTC" : "");
            switch (f4) {
              case h2:
                return r3 ? l3(1, 0) : l3(31, 11);
              case c3:
                return r3 ? l3(1, M4) : l3(0, M4 + 1);
              case o2:
                var g3 = this.$locale().weekStart || 0, D4 = (y6 < g3 ? y6 + 7 : y6) - g3;
                return l3(r3 ? m4 - D4 : m4 + (6 - D4), M4);
              case a2:
              case d2:
                return $4(v4 + "Hours", 0);
              case u2:
                return $4(v4 + "Minutes", 1);
              case s2:
                return $4(v4 + "Seconds", 2);
              case i2:
                return $4(v4 + "Milliseconds", 3);
              default:
                return this.clone();
            }
          }, m3.endOf = function(t5) {
            return this.startOf(t5, false);
          }, m3.$set = function(t5, e4) {
            var n3, o3 = b2.p(t5), f4 = "set" + (this.$u ? "UTC" : ""), l3 = (n3 = {}, n3[a2] = f4 + "Date", n3[d2] = f4 + "Date", n3[c3] = f4 + "Month", n3[h2] = f4 + "FullYear", n3[u2] = f4 + "Hours", n3[s2] = f4 + "Minutes", n3[i2] = f4 + "Seconds", n3[r2] = f4 + "Milliseconds", n3)[o3], $4 = o3 === a2 ? this.$D + (e4 - this.$W) : e4;
            if (o3 === c3 || o3 === h2) {
              var y6 = this.clone().set(d2, 1);
              y6.$d[l3]($4), y6.init(), this.$d = y6.set(d2, Math.min(this.$D, y6.daysInMonth())).$d;
            } else l3 && this.$d[l3]($4);
            return this.init(), this;
          }, m3.set = function(t5, e4) {
            return this.clone().$set(t5, e4);
          }, m3.get = function(t5) {
            return this[b2.p(t5)]();
          }, m3.add = function(r3, f4) {
            var d3, l3 = this;
            r3 = Number(r3);
            var $4 = b2.p(f4), y6 = /* @__PURE__ */ __name(function(t5) {
              var e4 = O2(l3);
              return b2.w(e4.date(e4.date() + Math.round(t5 * r3)), l3);
            }, "y");
            if ($4 === c3) return this.set(c3, this.$M + r3);
            if ($4 === h2) return this.set(h2, this.$y + r3);
            if ($4 === a2) return y6(1);
            if ($4 === o2) return y6(7);
            var M4 = (d3 = {}, d3[s2] = e3, d3[u2] = n2, d3[i2] = t4, d3)[$4] || 1, m4 = this.$d.getTime() + r3 * M4;
            return b2.w(m4, this);
          }, m3.subtract = function(t5, e4) {
            return this.add(-1 * t5, e4);
          }, m3.format = function(t5) {
            var e4 = this, n3 = this.$locale();
            if (!this.isValid()) return n3.invalidDate || l2;
            var r3 = t5 || "YYYY-MM-DDTHH:mm:ssZ", i3 = b2.z(this), s3 = this.$H, u3 = this.$m, a3 = this.$M, o3 = n3.weekdays, c4 = n3.months, f4 = n3.meridiem, h3 = /* @__PURE__ */ __name(function(t6, n4, i4, s4) {
              return t6 && (t6[n4] || t6(e4, r3)) || i4[n4].slice(0, s4);
            }, "h"), d3 = /* @__PURE__ */ __name(function(t6) {
              return b2.s(s3 % 12 || 12, t6, "0");
            }, "d"), $4 = f4 || function(t6, e6, n4) {
              var r4 = t6 < 12 ? "AM" : "PM";
              return n4 ? r4.toLowerCase() : r4;
            };
            return r3.replace(y5, function(t6, r4) {
              return r4 || function(t7) {
                switch (t7) {
                  case "YY":
                    return String(e4.$y).slice(-2);
                  case "YYYY":
                    return b2.s(e4.$y, 4, "0");
                  case "M":
                    return a3 + 1;
                  case "MM":
                    return b2.s(a3 + 1, 2, "0");
                  case "MMM":
                    return h3(n3.monthsShort, a3, c4, 3);
                  case "MMMM":
                    return h3(c4, a3);
                  case "D":
                    return e4.$D;
                  case "DD":
                    return b2.s(e4.$D, 2, "0");
                  case "d":
                    return String(e4.$W);
                  case "dd":
                    return h3(n3.weekdaysMin, e4.$W, o3, 2);
                  case "ddd":
                    return h3(n3.weekdaysShort, e4.$W, o3, 3);
                  case "dddd":
                    return o3[e4.$W];
                  case "H":
                    return String(s3);
                  case "HH":
                    return b2.s(s3, 2, "0");
                  case "h":
                    return d3(1);
                  case "hh":
                    return d3(2);
                  case "a":
                    return $4(s3, u3, true);
                  case "A":
                    return $4(s3, u3, false);
                  case "m":
                    return String(u3);
                  case "mm":
                    return b2.s(u3, 2, "0");
                  case "s":
                    return String(e4.$s);
                  case "ss":
                    return b2.s(e4.$s, 2, "0");
                  case "SSS":
                    return b2.s(e4.$ms, 3, "0");
                  case "Z":
                    return i3;
                }
                return null;
              }(t6) || i3.replace(":", "");
            });
          }, m3.utcOffset = function() {
            return 15 * -Math.round(this.$d.getTimezoneOffset() / 15);
          }, m3.diff = function(r3, d3, l3) {
            var $4, y6 = this, M4 = b2.p(d3), m4 = O2(r3), v4 = (m4.utcOffset() - this.utcOffset()) * e3, g3 = this - m4, D4 = /* @__PURE__ */ __name(function() {
              return b2.m(y6, m4);
            }, "D");
            switch (M4) {
              case h2:
                $4 = D4() / 12;
                break;
              case c3:
                $4 = D4();
                break;
              case f3:
                $4 = D4() / 3;
                break;
              case o2:
                $4 = (g3 - v4) / 6048e5;
                break;
              case a2:
                $4 = (g3 - v4) / 864e5;
                break;
              case u2:
                $4 = g3 / n2;
                break;
              case s2:
                $4 = g3 / e3;
                break;
              case i2:
                $4 = g3 / t4;
                break;
              default:
                $4 = g3;
            }
            return l3 ? $4 : b2.a($4);
          }, m3.daysInMonth = function() {
            return this.endOf(c3).$D;
          }, m3.$locale = function() {
            return D3[this.$L];
          }, m3.locale = function(t5, e4) {
            if (!t5) return this.$L;
            var n3 = this.clone(), r3 = w3(t5, e4, true);
            return r3 && (n3.$L = r3), n3;
          }, m3.clone = function() {
            return b2.w(this.$d, this);
          }, m3.toDate = function() {
            return new Date(this.valueOf());
          }, m3.toJSON = function() {
            return this.isValid() ? this.toISOString() : null;
          }, m3.toISOString = function() {
            return this.$d.toISOString();
          }, m3.toString = function() {
            return this.$d.toUTCString();
          }, M3;
        }(), k2 = _2.prototype;
        return O2.prototype = k2, [["$ms", r2], ["$s", i2], ["$m", s2], ["$H", u2], ["$W", a2], ["$M", c3], ["$y", h2], ["$D", d2]].forEach(function(t5) {
          k2[t5[1]] = function(e4) {
            return this.$g(e4, t5[0], t5[1]);
          };
        }), O2.extend = function(t5, e4) {
          return t5.$i || (t5(e4, _2, O2), t5.$i = true), O2;
        }, O2.locale = w3, O2.isDayjs = S3, O2.unix = function(t5) {
          return O2(1e3 * t5);
        }, O2.en = D3[g2], O2.Ls = D3, O2.p = {}, O2;
      });
    }
  });

  // 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/@[email protected]/node_modules/@iconify/utils/lib/icon/defaults.mjs
  var defaultIconDimensions, defaultIconTransformations, defaultIconProps, defaultExtendedIconProps;
  var init_defaults = __esm({
    "../../node_modules/.pnpm/@[email protected]/node_modules/@iconify/utils/lib/icon/defaults.mjs"() {
      "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/@[email protected]/node_modules/@iconify/utils/lib/customisations/defaults.mjs
  var defaultIconSizeCustomisations, defaultIconCustomisations;
  var init_defaults2 = __esm({
    "../../node_modules/.pnpm/@[email protected]/node_modules/@iconify/utils/lib/customisations/defaults.mjs"() {
      "use strict";
      init_defaults();
      defaultIconSizeCustomisations = Object.freeze({
        width: null,
        height: null
      });
      defaultIconCustomisations = Object.freeze({
        // Dimensions
        ...defaultIconSizeCustomisations,
        // Transformations
        ...defaultIconTransformations
      });
    }
  });

  // ../../node_modules/.pnpm/@[email protected]/node_modules/@iconify/utils/lib/icon/name.mjs
  var matchIconName, stringToIcon, validateIconName;
  var init_name = __esm({
    "../../node_modules/.pnpm/@[email protected]/node_modules/@iconify/utils/lib/icon/name.mjs"() {
      "use strict";
      matchIconName = /^[a-z0-9]+(-[a-z0-9]+)*$/;
      stringToIcon = /* @__PURE__ */ __name((value2, validate2, 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 name2 = colonSeparated.pop();
          const prefix = colonSeparated.pop();
          const result = {
            // Allow provider without '@': "provider:prefix:name"
            provider: colonSeparated.length > 0 ? colonSeparated[0] : provider,
            prefix,
            name: name2
          };
          return validate2 && !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 validate2 && !validateIconName(result) ? null : result;
        }
        if (allowSimpleName && provider === "") {
          const result = {
            provider,
            prefix: "",
            name
          };
          return validate2 && !validateIconName(result, allowSimpleName) ? null : result;
        }
        return null;
      }, "stringToIcon");
      validateIconName = /* @__PURE__ */ __name((icon2, allowSimpleName) => {
        if (!icon2) {
          return false;
        }
        return !!((icon2.provider === "" || icon2.provider.match(matchIconName)) && (allowSimpleName && icon2.prefix === "" || icon2.prefix.match(matchIconName)) && icon2.name.match(matchIconName));
      }, "validateIconName");
    }
  });

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

  // ../../node_modules/.pnpm/@[email protected]/node_modules/@iconify/utils/lib/icon/merge.mjs
  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/@[email protected]/node_modules/@iconify/utils/lib/icon/merge.mjs"() {
      "use strict";
      init_defaults();
      init_transformations();
      __name(mergeIconData, "mergeIconData");
    }
  });

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

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

  // ../../node_modules/.pnpm/@[email protected]/node_modules/@iconify/utils/lib/svg/size.mjs
  function calculateSize(size5, ratio, precision) {
    if (ratio === 1) {
      return size5;
    }
    precision = precision || 100;
    if (typeof size5 === "number") {
      return Math.ceil(size5 * ratio * precision) / precision;
    }
    if (typeof size5 !== "string") {
      return size5;
    }
    const oldParts = size5.split(unitsSplit);
    if (oldParts === null || !oldParts.length) {
      return size5;
    }
    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/@[email protected]/node_modules/@iconify/utils/lib/svg/size.mjs"() {
      "use strict";
      unitsSplit = /(-?[0-9.]*[0-9]+[0-9.]*)/g;
      unitsTest = /^-?[0-9.]*[0-9]+[0-9.]*$/g;
      __name(calculateSize, "calculateSize");
    }
  });

  // ../../node_modules/.pnpm/@[email protected]/node_modules/@iconify/utils/lib/svg/defs.mjs
  function splitSVGDefs(content, tag2 = "defs") {
    let defs2 = "";
    const index = content.indexOf("<" + tag2);
    while (index >= 0) {
      const start3 = content.indexOf(">", index);
      const end2 = 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 ? "" + defs2 + "" + 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/@[email protected]/node_modules/@iconify/utils/lib/svg/defs.mjs"() {
      "use strict";
      __name(splitSVGDefs, "splitSVGDefs");
      __name(mergeDefsAndContent, "mergeDefsAndContent");
      __name(wrapSVGContent, "wrapSVGContent");
    }
  });

  // ../../node_modules/.pnpm/@[email protected]/node_modules/@iconify/utils/lib/svg/build.mjs
  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,
          '',
          ""
        );
      }
    });
    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/@[email protected]/node_modules/@iconify/utils/lib/svg/build.mjs"() {
      "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/@[email protected]/node_modules/@iconify/utils/lib/svg/id.mjs
  function replaceIDs(body, prefix = randomPrefix) {
    const ids = [];
    let match2;
    while (match2 = regex.exec(body)) {
      ids.push(match2[1]);
    }
    if (!ids.length) {
      return body;
    }
    const suffix = "suffix" + (Math.random() * 16777216 | Date.now()).toString(16);
    ids.forEach((id28) => {
      const newID = typeof prefix === "function" ? prefix(id28) : prefix + (counter++).toString();
      const escapedID = id28.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
      body = body.replace(
        // Allowed characters before id: [#;"]
        // Allowed characters after id: [)"], .[a-z]
        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/@[email protected]/node_modules/@iconify/utils/lib/svg/id.mjs"() {
      "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/@[email protected]/node_modules/@iconify/utils/lib/svg/html.mjs
  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 '" + body + "";
  }
  var init_html = __esm({
    "../../node_modules/.pnpm/@[email protected]/node_modules/@iconify/utils/lib/svg/html.mjs"() {
      "use strict";
      __name(iconToHTML, "iconToHTML");
    }
  });

  // ../../node_modules/.pnpm/[email protected]/node_modules/ms/index.js
  var require_ms = __commonJS({
    "../../node_modules/.pnpm/[email protected]/node_modules/ms/index.js"(exports2, module2) {
      "use strict";
      var s2 = 1e3;
      var m2 = s2 * 60;
      var h2 = m2 * 60;
      var d2 = h2 * 24;
      var w3 = d2 * 7;
      var y5 = d2 * 365.25;
      module2.exports = function(val, options3) {
        options3 = options3 || {};
        var type3 = typeof val;
        if (type3 === "string" && val.length > 0) {
          return parse8(val);
        } else if (type3 === "number" && isFinite(val)) {
          return options3.long ? fmtLong(val) : fmtShort(val);
        }
        throw new Error(
          "val is not a non-empty string or a valid number. val=" + JSON.stringify(val)
        );
      };
      function parse8(str2) {
        str2 = String(str2);
        if (str2.length > 100) {
          return;
        }
        var match2 = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(
          str2
        );
        if (!match2) {
          return;
        }
        var n2 = parseFloat(match2[1]);
        var type3 = (match2[2] || "ms").toLowerCase();
        switch (type3) {
          case "years":
          case "year":
          case "yrs":
          case "yr":
          case "y":
            return n2 * y5;
          case "weeks":
          case "week":
          case "w":
            return n2 * w3;
          case "days":
          case "day":
          case "d":
            return n2 * d2;
          case "hours":
          case "hour":
          case "hrs":
          case "hr":
          case "h":
            return n2 * h2;
          case "minutes":
          case "minute":
          case "mins":
          case "min":
          case "m":
            return n2 * m2;
          case "seconds":
          case "second":
          case "secs":
          case "sec":
          case "s":
            return n2 * s2;
          case "milliseconds":
          case "millisecond":
          case "msecs":
          case "msec":
          case "ms":
            return n2;
          default:
            return void 0;
        }
      }
      __name(parse8, "parse");
      function fmtShort(ms3) {
        var msAbs = Math.abs(ms3);
        if (msAbs >= d2) {
          return Math.round(ms3 / d2) + "d";
        }
        if (msAbs >= h2) {
          return Math.round(ms3 / h2) + "h";
        }
        if (msAbs >= m2) {
          return Math.round(ms3 / m2) + "m";
        }
        if (msAbs >= s2) {
          return Math.round(ms3 / s2) + "s";
        }
        return ms3 + "ms";
      }
      __name(fmtShort, "fmtShort");
      function fmtLong(ms3) {
        var msAbs = Math.abs(ms3);
        if (msAbs >= d2) {
          return plural(ms3, msAbs, d2, "day");
        }
        if (msAbs >= h2) {
          return plural(ms3, msAbs, h2, "hour");
        }
        if (msAbs >= m2) {
          return plural(ms3, msAbs, m2, "minute");
        }
        if (msAbs >= s2) {
          return plural(ms3, msAbs, s2, "second");
        }
        return ms3 + " ms";
      }
      __name(fmtLong, "fmtLong");
      function plural(ms3, msAbs, n2, name) {
        var isPlural = msAbs >= n2 * 1.5;
        return Math.round(ms3 / n2) + " " + name + (isPlural ? "s" : "");
      }
      __name(plural, "plural");
    }
  });

  // ../../node_modules/.pnpm/[email protected][email protected]/node_modules/debug/src/common.js
  var require_common = __commonJS({
    "../../node_modules/.pnpm/[email protected][email protected]/node_modules/debug/src/common.js"(exports2, module2) {
      "use strict";
      function setup(env) {
        createDebug.debug = createDebug;
        createDebug.default = createDebug;
        createDebug.coerce = coerce;
        createDebug.disable = disable;
        createDebug.enable = enable;
        createDebug.enabled = enabled;
        createDebug.humanize = require_ms();
        createDebug.destroy = destroy2;
        Object.keys(env).forEach((key) => {
          createDebug[key] = env[key];
        });
        createDebug.names = [];
        createDebug.skips = [];
        createDebug.formatters = {};
        function selectColor(namespace) {
          let hash = 0;
          for (let i2 = 0; i2 < namespace.length; i2++) {
            hash = (hash << 5) - hash + namespace.charCodeAt(i2);
            hash |= 0;
          }
          return createDebug.colors[Math.abs(hash) % createDebug.colors.length];
        }
        __name(selectColor, "selectColor");
        createDebug.selectColor = selectColor;
        function createDebug(namespace) {
          let prevTime;
          let enableOverride = null;
          let namespacesCache;
          let enabledCache;
          function debug(...args) {
            if (!debug.enabled) {
              return;
            }
            const self2 = debug;
            const curr = Number(/* @__PURE__ */ new Date());
            const ms3 = curr - (prevTime || curr);
            self2.diff = ms3;
            self2.prev = prevTime;
            self2.curr = curr;
            prevTime = curr;
            args[0] = createDebug.coerce(args[0]);
            if (typeof args[0] !== "string") {
              args.unshift("%O");
            }
            let index = 0;
            args[0] = args[0].replace(/%([a-zA-Z%])/g, (match2, format3) => {
              if (match2 === "%%") {
                return "%";
              }
              index++;
              const formatter = createDebug.formatters[format3];
              if (typeof formatter === "function") {
                const val = args[index];
                match2 = formatter.call(self2, val);
                args.splice(index, 1);
                index--;
              }
              return match2;
            });
            createDebug.formatArgs.call(self2, args);
            const logFn = self2.log || createDebug.log;
            logFn.apply(self2, args);
          }
          __name(debug, "debug");
          debug.namespace = namespace;
          debug.useColors = createDebug.useColors();
          debug.color = createDebug.selectColor(namespace);
          debug.extend = extend5;
          debug.destroy = createDebug.destroy;
          Object.defineProperty(debug, "enabled", {
            enumerable: true,
            configurable: false,
            get: /* @__PURE__ */ __name(() => {
              if (enableOverride !== null) {
                return enableOverride;
              }
              if (namespacesCache !== createDebug.namespaces) {
                namespacesCache = createDebug.namespaces;
                enabledCache = createDebug.enabled(namespace);
              }
              return enabledCache;
            }, "get"),
            set: /* @__PURE__ */ __name((v3) => {
              enableOverride = v3;
            }, "set")
          });
          if (typeof createDebug.init === "function") {
            createDebug.init(debug);
          }
          return debug;
        }
        __name(createDebug, "createDebug");
        function extend5(namespace, delimiter3) {
          const newDebug = createDebug(this.namespace + (typeof delimiter3 === "undefined" ? ":" : delimiter3) + namespace);
          newDebug.log = this.log;
          return newDebug;
        }
        __name(extend5, "extend");
        function enable(namespaces2) {
          createDebug.save(namespaces2);
          createDebug.namespaces = namespaces2;
          createDebug.names = [];
          createDebug.skips = [];
          let i2;
          const split = (typeof namespaces2 === "string" ? namespaces2 : "").split(/[\s,]+/);
          const len = split.length;
          for (i2 = 0; i2 < len; i2++) {
            if (!split[i2]) {
              continue;
            }
            namespaces2 = split[i2].replace(/\*/g, ".*?");
            if (namespaces2[0] === "-") {
              createDebug.skips.push(new RegExp("^" + namespaces2.slice(1) + "$"));
            } else {
              createDebug.names.push(new RegExp("^" + namespaces2 + "$"));
            }
          }
        }
        __name(enable, "enable");
        function disable() {
          const namespaces2 = [
            ...createDebug.names.map(toNamespace),
            ...createDebug.skips.map(toNamespace).map((namespace) => "-" + namespace)
          ].join(",");
          createDebug.enable("");
          return namespaces2;
        }
        __name(disable, "disable");
        function enabled(name) {
          if (name[name.length - 1] === "*") {
            return true;
          }
          let i2;
          let len;
          for (i2 = 0, len = createDebug.skips.length; i2 < len; i2++) {
            if (createDebug.skips[i2].test(name)) {
              return false;
            }
          }
          for (i2 = 0, len = createDebug.names.length; i2 < len; i2++) {
            if (createDebug.names[i2].test(name)) {
              return true;
            }
          }
          return false;
        }
        __name(enabled, "enabled");
        function toNamespace(regexp) {
          return regexp.toString().substring(2, regexp.toString().length - 2).replace(/\.\*\?$/, "*");
        }
        __name(toNamespace, "toNamespace");
        function coerce(val) {
          if (val instanceof Error) {
            return val.stack || val.message;
          }
          return val;
        }
        __name(coerce, "coerce");
        function destroy2() {
          console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");
        }
        __name(destroy2, "destroy");
        createDebug.enable(createDebug.load());
        return createDebug;
      }
      __name(setup, "setup");
      module2.exports = setup;
    }
  });

  // ../../node_modules/.pnpm/[email protected][email protected]/node_modules/debug/src/browser.js
  var require_browser = __commonJS({
    "../../node_modules/.pnpm/[email protected][email protected]/node_modules/debug/src/browser.js"(exports2, module2) {
      "use strict";
      exports2.formatArgs = formatArgs;
      exports2.save = save;
      exports2.load = load2;
      exports2.useColors = useColors;
      exports2.storage = localstorage();
      exports2.destroy = /* @__PURE__ */ (() => {
        let warned = false;
        return () => {
          if (!warned) {
            warned = true;
            console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");
          }
        };
      })();
      exports2.colors = [
        "#0000CC",
        "#0000FF",
        "#0033CC",
        "#0033FF",
        "#0066CC",
        "#0066FF",
        "#0099CC",
        "#0099FF",
        "#00CC00",
        "#00CC33",
        "#00CC66",
        "#00CC99",
        "#00CCCC",
        "#00CCFF",
        "#3300CC",
        "#3300FF",
        "#3333CC",
        "#3333FF",
        "#3366CC",
        "#3366FF",
        "#3399CC",
        "#3399FF",
        "#33CC00",
        "#33CC33",
        "#33CC66",
        "#33CC99",
        "#33CCCC",
        "#33CCFF",
        "#6600CC",
        "#6600FF",
        "#6633CC",
        "#6633FF",
        "#66CC00",
        "#66CC33",
        "#9900CC",
        "#9900FF",
        "#9933CC",
        "#9933FF",
        "#99CC00",
        "#99CC33",
        "#CC0000",
        "#CC0033",
        "#CC0066",
        "#CC0099",
        "#CC00CC",
        "#CC00FF",
        "#CC3300",
        "#CC3333",
        "#CC3366",
        "#CC3399",
        "#CC33CC",
        "#CC33FF",
        "#CC6600",
        "#CC6633",
        "#CC9900",
        "#CC9933",
        "#CCCC00",
        "#CCCC33",
        "#FF0000",
        "#FF0033",
        "#FF0066",
        "#FF0099",
        "#FF00CC",
        "#FF00FF",
        "#FF3300",
        "#FF3333",
        "#FF3366",
        "#FF3399",
        "#FF33CC",
        "#FF33FF",
        "#FF6600",
        "#FF6633",
        "#FF9900",
        "#FF9933",
        "#FFCC00",
        "#FFCC33"
      ];
      function useColors() {
        if (typeof window !== "undefined" && window.process && (window.process.type === "renderer" || window.process.__nwjs)) {
          return true;
        }
        if (typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) {
          return false;
        }
        let m2;
        return typeof document !== "undefined" && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || // Is firebug? http://stackoverflow.com/a/398120/376773
        typeof window !== "undefined" && window.console && (window.console.firebug || window.console.exception && window.console.table) || // Is firefox >= v31?
        // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
        typeof navigator !== "undefined" && navigator.userAgent && (m2 = navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)) && parseInt(m2[1], 10) >= 31 || // Double check webkit in userAgent just in case we are in a worker
        typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/);
      }
      __name(useColors, "useColors");
      function formatArgs(args) {
        args[0] = (this.useColors ? "%c" : "") + this.namespace + (this.useColors ? " %c" : " ") + args[0] + (this.useColors ? "%c " : " ") + "+" + module2.exports.humanize(this.diff);
        if (!this.useColors) {
          return;
        }
        const c3 = "color: " + this.color;
        args.splice(1, 0, c3, "color: inherit");
        let index = 0;
        let lastC = 0;
        args[0].replace(/%[a-zA-Z%]/g, (match2) => {
          if (match2 === "%%") {
            return;
          }
          index++;
          if (match2 === "%c") {
            lastC = index;
          }
        });
        args.splice(lastC, 0, c3);
      }
      __name(formatArgs, "formatArgs");
      exports2.log = console.debug || console.log || (() => {
      });
      function save(namespaces2) {
        try {
          if (namespaces2) {
            exports2.storage.setItem("debug", namespaces2);
          } else {
            exports2.storage.removeItem("debug");
          }
        } catch (error3) {
        }
      }
      __name(save, "save");
      function load2() {
        let r2;
        try {
          r2 = exports2.storage.getItem("debug");
        } catch (error3) {
        }
        if (!r2 && typeof process !== "undefined" && "env" in process) {
          r2 = process.env.DEBUG;
        }
        return r2;
      }
      __name(load2, "load");
      function localstorage() {
        try {
          return localStorage;
        } catch (error3) {
        }
      }
      __name(localstorage, "localstorage");
      module2.exports = require_common()(exports2);
      var { formatters } = module2.exports;
      formatters.j = function(v3) {
        try {
          return JSON.stringify(v3);
        } catch (error3) {
          return "[UnexpectedJSONParseError]: " + error3.message;
        }
      };
    }
  });

  // ../../node_modules/.pnpm/@[email protected]/node_modules/@iconify/utils/lib/index.mjs
  var import_debug;
  var init_lib = __esm({
    "../../node_modules/.pnpm/@[email protected]/node_modules/@iconify/utils/lib/index.mjs"() {
      "use strict";
      init_name();
      init_get_icon();
      init_build();
      init_id();
      init_html();
      import_debug = __toESM(require_browser(), 1);
    }
  });

  // src/rendering-util/icons.ts
  var unknownIcon, iconsStore, loaderStore, registerIconPacks, getRegisteredIconData, getIconSVG;
  var init_icons = __esm({
    "src/rendering-util/icons.ts"() {
      "use strict";
      init_logger();
      init_lib();
      unknownIcon = {
        body: '?',
        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 data5 = stringToIcon(iconName, true, fallbackPrefix !== void 0);
        if (!data5) {
          throw new Error(`Invalid icon name: ${iconName}`);
        }
        const prefix = data5.prefix || fallbackPrefix;
        if (!prefix) {
          throw new Error(`Icon name must contain a prefix: ${iconName}`);
        }
        let icons = iconsStore.get(prefix);
        if (!icons) {
          const loader27 = loaderStore.get(prefix);
          if (!loader27) {
            throw new Error(`Icon set not found: ${data5.prefix}`);
          }
          try {
            const loaded = await loader27();
            icons = { ...loaded, prefix };
            iconsStore.set(prefix, icons);
          } catch (e3) {
            log.error(e3);
            throw new Error(`Failed to load icon set: ${data5.prefix}`);
          }
        }
        const iconData = getIconData(icons, data5.name);
        if (!iconData) {
          throw new Error(`Icon not found: ${iconName}`);
        }
        return iconData;
      }, "getRegisteredIconData");
      getIconSVG = /* @__PURE__ */ __name(async (iconName, customisations) => {
        let iconData;
        try {
          iconData = await getRegisteredIconData(iconName, customisations?.fallbackPrefix);
        } catch (e3) {
          log.error(e3);
          iconData = unknownIcon;
        }
        const renderData = iconToSVG(iconData, customisations);
        const svg = iconToHTML(replaceIDs(renderData.body), renderData.attributes);
        return svg;
      }, "getIconSVG");
    }
  });

  // ../../node_modules/.pnpm/[email protected]/node_modules/ts-dedent/esm/index.js
  function dedent(templ) {
    var values2 = [];
    for (var _i = 1; _i < arguments.length; _i++) {
      values2[_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(match2) {
          var _a, _b;
          return (_b = (_a = match2.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];
    values2.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/[email protected]/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 = /^-{3}\s*[\n\r](.*?)[\n\r]-{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(text3, config6) {
        text3 = text3.replace(frontMatterRegex, "").replace(directiveRegex, "").replace(anyCommentRegex, "\n");
        for (const [key, { detector: detector26 }] of Object.entries(detectors)) {
          const diagram25 = detector26(text3, config6);
          if (diagram25) {
            return key;
          }
        }
        throw new UnknownDiagramError(
          `No diagram type detected matching given configuration for text: ${text3}`
        );
      }, "detectType");
      registerLazyLoadedDiagrams = /* @__PURE__ */ __name((...diagrams2) => {
        for (const { id: id28, detector: detector26, loader: loader27 } of diagrams2) {
          addDetector(id28, detector26, loader27);
        }
      }, "registerLazyLoadedDiagrams");
      addDetector = /* @__PURE__ */ __name((key, detector26, loader27) => {
        if (detectors[key]) {
          log.warn(`Detector with key ${key} already exists. Overwriting.`);
        }
        detectors[key] = { detector: detector26, loader: loader27 };
        log.debug(`Detector with key ${key} added${loader27 ? " 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, l2) {
          for (o3 = o3 || {}, l2 = k2.length; l2--; o3[k2[l2]] = 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 parser23 = {
          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 parse8(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 lexer3 = 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];
              }
            }
            lexer3.setInput(input, sharedState.yy);
            sharedState.yy.lexer = lexer3;
            sharedState.yy.parser = this;
            if (typeof lexer3.yylloc == "undefined") {
              lexer3.yylloc = {};
            }
            var yyloc = lexer3.yylloc;
            lstack.push(yyloc);
            var ranges = lexer3.options && lexer3.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 lex2() {
              var token2;
              token2 = tstack.pop() || lexer3.lex() || EOF2;
              if (typeof token2 !== "number") {
                if (token2 instanceof Array) {
                  tstack = token2;
                  token2 = tstack.pop();
                }
                token2 = self2.symbols_[token2] || token2;
              }
              return token2;
            }
            __name(lex2, "lex");
            var symbol, preErrorSymbol, state5, action, a2, r2, yyval = {}, p3, len, newState2, expected;
            while (true) {
              state5 = stack[stack.length - 1];
              if (this.defaultActions[state5]) {
                action = this.defaultActions[state5];
              } else {
                if (symbol === null || typeof symbol == "undefined") {
                  symbol = lex2();
                }
                action = table[state5] && table[state5][symbol];
              }
              if (typeof action === "undefined" || !action.length || !action[0]) {
                var errStr = "";
                expected = [];
                for (p3 in table[state5]) {
                  if (this.terminals_[p3] && p3 > TERROR) {
                    expected.push("'" + this.terminals_[p3] + "'");
                  }
                }
                if (lexer3.showPosition) {
                  errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer3.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: lexer3.match,
                  token: this.terminals_[symbol] || symbol,
                  line: lexer3.yylineno,
                  loc: yyloc,
                  expected
                });
              }
              if (action[0] instanceof Array && action.length > 1) {
                throw new Error("Parse Error: multiple actions possible at state: " + state5 + ", token: " + symbol);
              }
              switch (action[0]) {
                case 1:
                  stack.push(symbol);
                  vstack.push(lexer3.yytext);
                  lstack.push(lexer3.yylloc);
                  stack.push(action[1]);
                  symbol = null;
                  if (!preErrorSymbol) {
                    yyleng = lexer3.yyleng;
                    yytext = lexer3.yytext;
                    yylineno = lexer3.yylineno;
                    yyloc = lexer3.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 lexer2 = /* @__PURE__ */ function() {
          var lexer3 = {
            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(match2, 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 = match2[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 + match2[0].length
              };
              this.yytext += match2[0];
              this.match += match2[0];
              this.matches = match2;
              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(match2[0].length);
              this.matched += match2[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, match2, tempMatch, index;
              if (!this._more) {
                this.yytext = "";
                this.match = "";
              }
              var rules = this._currentRules();
              for (var i2 = 0; i2 < rules.length; i2++) {
                tempMatch = this._input.match(this.rules[rules[i2]]);
                if (tempMatch && (!match2 || tempMatch[0].length > match2[0].length)) {
                  match2 = tempMatch;
                  index = i2;
                  if (this.options.backtrack_lexer) {
                    token2 = this.test_match(tempMatch, rules[i2]);
                    if (token2 !== false) {
                      return token2;
                    } else if (this._backtrack) {
                      match2 = false;
                      continue;
                    } else {
                      return false;
                    }
                  } else if (!this.options.flex) {
                    break;
                  }
                }
              }
              if (match2) {
                token2 = this.test_match(match2, rules[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 lex2() {
              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": [], "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 lexer3;
        }();
        parser23.lexer = lexer2;
        function Parser3() {
          this.yy = {};
        }
        __name(Parser3, "Parser");
        Parser3.prototype = parser23;
        parser23.Parser = Parser3;
        return new Parser3();
      }();
      parser.parser = parser;
      c4Diagram_default = parser;
    }
  });

  // src/assignWithDepth.ts
  var assignWithDepth, assignWithDepth_default;
  var init_assignWithDepth = __esm({
    "src/assignWithDepth.ts"() {
      "use strict";
      assignWithDepth = /* @__PURE__ */ __name((dst, src, { depth = 2, clobber = false } = {}) => {
        const config6 = { depth, clobber };
        if (Array.isArray(src) && !Array.isArray(dst)) {
          src.forEach((s2) => assignWithDepth(dst, s2, config6));
          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 || 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 && typeof dst === "object" && typeof src === "object") {
          Object.keys(src).forEach((key) => {
            if (typeof src[key] === "object" && (dst[key] === void 0 || typeof dst[key] === "object")) {
              if (dst[key] === void 0) {
                dst[key] = Array.isArray(src[key]) ? [] : {};
              }
              dst[key] = assignWithDepth(dst[key], src[key], { depth: depth - 1, clobber });
            } else if (clobber || typeof dst[key] !== "object" && typeof src[key] !== "object") {
              dst[key] = src[key];
            }
          });
        }
        return dst;
      }, "assignWithDepth");
      assignWithDepth_default = assignWithDepth;
    }
  });

  // ../../node_modules/.pnpm/[email protected]/node_modules/khroma/dist/utils/channel.js
  var Channel, channel_default;
  var init_channel = __esm({
    "../../node_modules/.pnpm/[email protected]/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((b2) => b2 >= 255 ? 255 : b2 < 0 ? 0 : b2, "b"),
          h: /* @__PURE__ */ __name((h2) => h2 % 360, "h"),
          s: /* @__PURE__ */ __name((s2) => s2 >= 100 ? 100 : s2 < 0 ? 0 : s2, "s"),
          l: /* @__PURE__ */ __name((l2) => l2 >= 100 ? 100 : l2 < 0 ? 0 : l2, "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, q2, t4) => {
          if (t4 < 0)
            t4 += 1;
          if (t4 > 1)
            t4 -= 1;
          if (t4 < 1 / 6)
            return p3 + (q2 - p3) * 6 * t4;
          if (t4 < 1 / 2)
            return q2;
          if (t4 < 2 / 3)
            return p3 + (q2 - p3) * (2 / 3 - t4) * 6;
          return p3;
        }, "hue2rgb"),
        hsl2rgb: /* @__PURE__ */ __name(({ h: h2, s: s2, l: l2 }, channel2) => {
          if (!s2)
            return l2 * 2.55;
          h2 /= 360;
          s2 /= 100;
          l2 /= 100;
          const q2 = l2 < 0.5 ? l2 * (1 + s2) : l2 + s2 - l2 * s2;
          const p3 = 2 * l2 - q2;
          switch (channel2) {
            case "r":
              return Channel.hue2rgb(p3, q2, h2 + 1 / 3) * 255;
            case "g":
              return Channel.hue2rgb(p3, q2, h2) * 255;
            case "b":
              return Channel.hue2rgb(p3, q2, h2 - 1 / 3) * 255;
          }
        }, "hsl2rgb"),
        rgb2hsl: /* @__PURE__ */ __name(({ r: r2, g: g2, b: b2 }, channel2) => {
          r2 /= 255;
          g2 /= 255;
          b2 /= 255;
          const max10 = Math.max(r2, g2, b2);
          const min9 = Math.min(r2, g2, b2);
          const l2 = (max10 + min9) / 2;
          if (channel2 === "l")
            return l2 * 100;
          if (max10 === min9)
            return 0;
          const d2 = max10 - min9;
          const s2 = l2 > 0.5 ? d2 / (2 - max10 - min9) : d2 / (max10 + min9);
          if (channel2 === "s")
            return s2 * 100;
          switch (max10) {
            case r2:
              return ((g2 - b2) / d2 + (g2 < b2 ? 6 : 0)) * 60;
            case g2:
              return ((b2 - r2) / d2 + 2) * 60;
            case b2:
              return ((r2 - g2) / d2 + 4) * 60;
            default:
              return -1;
          }
        }, "rgb2hsl")
      };
      channel_default = Channel;
    }
  });

  // ../../node_modules/.pnpm/[email protected]/node_modules/khroma/dist/utils/lang.js
  var Lang, lang_default;
  var init_lang = __esm({
    "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/khroma/dist/utils/unit.js
  var Unit, unit_default;
  var init_unit = __esm({
    "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/khroma/dist/utils/index.js
  var Utils, utils_default;
  var init_utils = __esm({
    "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/khroma/dist/constants.js
  var DEC2HEX, TYPE;
  var init_constants = __esm({
    "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/khroma/dist/channels/type.js
  var Type, type_default;
  var init_type = __esm({
    "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/khroma/dist/channels/index.js
  var Channels, channels_default;
  var init_channels = __esm({
    "../../node_modules/.pnpm/[email protected]/node_modules/khroma/dist/channels/index.js"() {
      "use strict";
      init_utils();
      init_type();
      init_constants();
      Channels = class {
        static {
          __name(this, "Channels");
        }
        /* CONSTRUCTOR */
        constructor(data5, color2) {
          this.color = color2;
          this.changed = false;
          this.data = data5;
          this.type = new type_default();
        }
        /* API */
        set(data5, color2) {
          this.color = color2;
          this.changed = false;
          this.data = data5;
          this.type.type = TYPE.ALL;
          return this;
        }
        /* HELPERS */
        _ensureHSL() {
          const data5 = this.data;
          const { h: h2, s: s2, l: l2 } = data5;
          if (h2 === void 0)
            data5.h = utils_default.channel.rgb2hsl(data5, "h");
          if (s2 === void 0)
            data5.s = utils_default.channel.rgb2hsl(data5, "s");
          if (l2 === void 0)
            data5.l = utils_default.channel.rgb2hsl(data5, "l");
        }
        _ensureRGB() {
          const data5 = this.data;
          const { r: r2, g: g2, b: b2 } = data5;
          if (r2 === void 0)
            data5.r = utils_default.channel.hsl2rgb(data5, "r");
          if (g2 === void 0)
            data5.g = utils_default.channel.hsl2rgb(data5, "g");
          if (b2 === void 0)
            data5.b = utils_default.channel.hsl2rgb(data5, "b");
        }
        /* GETTERS */
        get r() {
          const data5 = this.data;
          const r2 = data5.r;
          if (!this.type.is(TYPE.HSL) && r2 !== void 0)
            return r2;
          this._ensureHSL();
          return utils_default.channel.hsl2rgb(data5, "r");
        }
        get g() {
          const data5 = this.data;
          const g2 = data5.g;
          if (!this.type.is(TYPE.HSL) && g2 !== void 0)
            return g2;
          this._ensureHSL();
          return utils_default.channel.hsl2rgb(data5, "g");
        }
        get b() {
          const data5 = this.data;
          const b2 = data5.b;
          if (!this.type.is(TYPE.HSL) && b2 !== void 0)
            return b2;
          this._ensureHSL();
          return utils_default.channel.hsl2rgb(data5, "b");
        }
        get h() {
          const data5 = this.data;
          const h2 = data5.h;
          if (!this.type.is(TYPE.RGB) && h2 !== void 0)
            return h2;
          this._ensureRGB();
          return utils_default.channel.rgb2hsl(data5, "h");
        }
        get s() {
          const data5 = this.data;
          const s2 = data5.s;
          if (!this.type.is(TYPE.RGB) && s2 !== void 0)
            return s2;
          this._ensureRGB();
          return utils_default.channel.rgb2hsl(data5, "s");
        }
        get l() {
          const data5 = this.data;
          const l2 = data5.l;
          if (!this.type.is(TYPE.RGB) && l2 !== void 0)
            return l2;
          this._ensureRGB();
          return utils_default.channel.rgb2hsl(data5, "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(b2) {
          this.type.set(TYPE.RGB);
          this.changed = true;
          this.data.b = b2;
        }
        set h(h2) {
          this.type.set(TYPE.HSL);
          this.changed = true;
          this.data.h = h2;
        }
        set s(s2) {
          this.type.set(TYPE.HSL);
          this.changed = true;
          this.data.s = s2;
        }
        set l(l2) {
          this.type.set(TYPE.HSL);
          this.changed = true;
          this.data.l = l2;
        }
        set a(a2) {
          this.changed = true;
          this.data.a = a2;
        }
      };
      channels_default = Channels;
    }
  });

  // ../../node_modules/.pnpm/[email protected]/node_modules/khroma/dist/channels/reusable.js
  var channels, reusable_default;
  var init_reusable = __esm({
    "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/khroma/dist/color/hex.js
  var Hex, hex_default;
  var init_hex = __esm({
    "../../node_modules/.pnpm/[email protected]/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 match2 = color2.match(Hex.re);
          if (!match2)
            return;
          const hex2 = match2[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: b2, a: a2 } = channels2;
          if (a2 < 1) {
            return `#${DEC2HEX[Math.round(r2)]}${DEC2HEX[Math.round(g2)]}${DEC2HEX[Math.round(b2)]}${DEC2HEX[Math.round(a2 * 255)]}`;
          } else {
            return `#${DEC2HEX[Math.round(r2)]}${DEC2HEX[Math.round(g2)]}${DEC2HEX[Math.round(b2)]}`;
          }
        }, "stringify")
      };
      hex_default = Hex;
    }
  });

  // ../../node_modules/.pnpm/[email protected]/node_modules/khroma/dist/color/hsl.js
  var HSL, hsl_default;
  var init_hsl = __esm({
    "../../node_modules/.pnpm/[email protected]/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 match2 = hue2.match(HSL.hueRe);
          if (match2) {
            const [, number7, unit2] = match2;
            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 match2 = color2.match(HSL.re);
          if (!match2)
            return;
          const [, h2, s2, l2, a2, isAlphaPercentage] = match2;
          return reusable_default.set({
            h: HSL._hue2deg(h2),
            s: utils_default.channel.clamp.s(parseFloat(s2)),
            l: utils_default.channel.clamp.l(parseFloat(l2)),
            a: a2 ? utils_default.channel.clamp.a(isAlphaPercentage ? parseFloat(a2) / 100 : parseFloat(a2)) : 1
          }, color2);
        }, "parse"),
        stringify: /* @__PURE__ */ __name((channels2) => {
          const { h: h2, s: s2, l: l2, a: a2 } = channels2;
          if (a2 < 1) {
            return `hsla(${utils_default.lang.round(h2)}, ${utils_default.lang.round(s2)}%, ${utils_default.lang.round(l2)}%, ${a2})`;
          } else {
            return `hsl(${utils_default.lang.round(h2)}, ${utils_default.lang.round(s2)}%, ${utils_default.lang.round(l2)}%)`;
          }
        }, "stringify")
      };
      hsl_default = HSL;
    }
  });

  // ../../node_modules/.pnpm/[email protected]/node_modules/khroma/dist/color/keyword.js
  var Keyword, keyword_default;
  var init_keyword = __esm({
    "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/khroma/dist/color/rgb.js
  var RGB, rgb_default;
  var init_rgb = __esm({
    "../../node_modules/.pnpm/[email protected]/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 match2 = color2.match(RGB.re);
          if (!match2)
            return;
          const [, r2, isRedPercentage, g2, isGreenPercentage, b2, isBluePercentage, a2, isAlphaPercentage] = match2;
          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(b2) * 2.55 : parseFloat(b2)),
            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: b2, a: a2 } = channels2;
          if (a2 < 1) {
            return `rgba(${utils_default.lang.round(r2)}, ${utils_default.lang.round(g2)}, ${utils_default.lang.round(b2)}, ${utils_default.lang.round(a2)})`;
          } else {
            return `rgb(${utils_default.lang.round(r2)}, ${utils_default.lang.round(g2)}, ${utils_default.lang.round(b2)})`;
          }
        }, "stringify")
      };
      rgb_default = RGB;
    }
  });

  // ../../node_modules/.pnpm/[email protected]/node_modules/khroma/dist/color/index.js
  var Color, color_default;
  var init_color = __esm({
    "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/khroma/dist/methods/change.js
  var change, change_default;
  var init_change = __esm({
    "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/khroma/dist/methods/rgba.js
  var rgba, rgba_default;
  var init_rgba = __esm({
    "../../node_modules/.pnpm/[email protected]/node_modules/khroma/dist/methods/rgba.js"() {
      "use strict";
      init_utils();
      init_reusable();
      init_color();
      init_change();
      rgba = /* @__PURE__ */ __name((r2, g2, b2 = 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(b2),
          a: utils_default.channel.clamp.a(a2)
        });
        return color_default.stringify(channels2);
      }, "rgba");
      rgba_default = rgba;
    }
  });

  // ../../node_modules/.pnpm/[email protected]/node_modules/khroma/dist/methods/channel.js
  var channel, channel_default2;
  var init_channel2 = __esm({
    "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/khroma/dist/methods/luminance.js
  var luminance, luminance_default;
  var init_luminance = __esm({
    "../../node_modules/.pnpm/[email protected]/node_modules/khroma/dist/methods/luminance.js"() {
      "use strict";
      init_utils();
      init_color();
      luminance = /* @__PURE__ */ __name((color2) => {
        const { r: r2, g: g2, b: b2 } = 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(b2);
        return utils_default.lang.round(luminance2);
      }, "luminance");
      luminance_default = luminance;
    }
  });

  // ../../node_modules/.pnpm/[email protected]/node_modules/khroma/dist/methods/is_light.js
  var isLight, is_light_default;
  var init_is_light = __esm({
    "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/khroma/dist/methods/is_dark.js
  var isDark, is_dark_default;
  var init_is_dark = __esm({
    "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/khroma/dist/methods/adjust_channel.js
  var adjustChannel, adjust_channel_default;
  var init_adjust_channel = __esm({
    "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/khroma/dist/methods/lighten.js
  var lighten, lighten_default;
  var init_lighten = __esm({
    "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/khroma/dist/methods/darken.js
  var darken, darken_default;
  var init_darken = __esm({
    "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/khroma/dist/methods/adjust.js
  var adjust, adjust_default;
  var init_adjust = __esm({
    "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/khroma/dist/methods/mix.js
  var mix, mix_default;
  var init_mix = __esm({
    "../../node_modules/.pnpm/[email protected]/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: b2, 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 + b2 * weight22;
        const a3 = a1 * weightScale + a2 * (1 - weightScale);
        return rgba_default(r3, g3, b3, a3);
      }, "mix");
      mix_default = mix;
    }
  });

  // ../../node_modules/.pnpm/[email protected]/node_modules/khroma/dist/methods/invert.js
  var invert, invert_default;
  var init_invert = __esm({
    "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/khroma/dist/methods/index.js
  var init_methods = __esm({
    "../../node_modules/.pnpm/[email protected]/node_modules/khroma/dist/methods/index.js"() {
      "use strict";
      init_rgba();
      init_channel2();
      init_is_dark();
      init_lighten();
      init_darken();
      init_adjust();
      init_invert();
    }
  });

  // ../../node_modules/.pnpm/[email protected]/node_modules/khroma/dist/index.js
  var init_dist = __esm({
    "../../node_modules/.pnpm/[email protected]/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.fontFamily = '"trebuchet ms", verdana, arial, sans-serif';
          this.fontSize = "16px";
        }
        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.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.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 || 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.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,
            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.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];
          });
        }
      };
      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.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.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.personBorder = this.primaryBorderColor;
          this.personBkg = this.mainBkg;
          this.archEdgeColor = "calculated";
          this.archEdgeArrowColor = "calculated";
          this.archEdgeWidth = "3";
          this.archGroupBorderColor = this.primaryBorderColor;
          this.archGroupBorderWidth = "2px";
          this.labelColor = "calculated";
          this.errorBkgColor = "#a44141";
          this.errorTextColor = "#ddd";
        }
        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.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 = this.darkTextColor;
          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.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.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 || "#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.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.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.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.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.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.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.personBorder = this.primaryBorderColor;
          this.personBkg = this.mainBkg;
          this.archEdgeColor = "calculated";
          this.archEdgeArrowColor = "calculated";
          this.archEdgeWidth = "3";
          this.archGroupBorderColor = this.primaryBorderColor;
          this.archGroupBorderWidth = "2px";
          this.labelColor = "black";
          this.errorBkgColor = "#552222";
          this.errorTextColor = "#552222";
          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 = lighten_default(this.border1, 23);
          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.taskTextColor = this.taskTextLightColor;
          this.taskTextOutsideColor = this.taskTextDarkColor;
          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 || "#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.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 || "#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.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];
          });
        }
      };
      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.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.personBorder = this.primaryBorderColor;
          this.personBkg = this.mainBkg;
          this.archEdgeColor = "calculated";
          this.archEdgeArrowColor = "calculated";
          this.archEdgeWidth = "3";
          this.archGroupBorderColor = this.primaryBorderColor;
          this.archGroupBorderWidth = "2px";
          this.labelColor = "black";
          this.errorBkgColor = "#552222";
          this.errorTextColor = "#552222";
        }
        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.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.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.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.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 || "#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.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.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.personBorder = this.primaryBorderColor;
          this.personBkg = this.mainBkg;
          this.archEdgeColor = "calculated";
          this.archEdgeArrowColor = "calculated";
          this.archEdgeWidth = "3";
          this.archGroupBorderColor = this.primaryBorderColor;
          this.archGroupBorderWidth = "2px";
          this.labelColor = "black";
          this.errorBkgColor = "#552222";
          this.errorTextColor = "#552222";
        }
        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.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.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";
          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 || "#EEE,#6BB8E4,#8ACB88,#C7ACD6,#E8DCC2,#FFB2A8,#FFF380,#7E8D91,#FFD8B1,#FAF3E0"
          };
          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.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/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();
      themes_default = {
        base: {
          getThemeVariables
        },
        dark: {
          getThemeVariables: getThemeVariables2
        },
        default: {
          getThemeVariables: getThemeVariables3
        },
        forest: {
          getThemeVariables: getThemeVariables4
        },
        neutral: {
          getThemeVariables: getThemeVariables5
        }
      };
    }
  });

  // 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": true,
          "nodeSpacing": 50,
          "rankSpacing": 50,
          "curve": "basis",
          "padding": 15,
          "defaultRenderer": "dagre-wrapper",
          "wrappingWidth": 200
        },
        "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,
          "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"
          ]
        },
        "class": {
          "useMaxWidth": true,
          "titleTopMargin": 25,
          "arrowMarkerAbsolute": false,
          "dividerMargin": 10,
          "padding": 5,
          "textHeight": 10,
          "defaultRenderer": "dagre-wrapper",
          "htmlLabels": false,
          "hideEmptyMembersBox": false
        },
        "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,
          "stroke": "gray",
          "fill": "honeydew",
          "fontSize": 12
        },
        "pie": {
          "useMaxWidth": true,
          "textPosition": 0.75
        },
        "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,
          "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
          },
          "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
          },
          "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
        },
        "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": ""
        },
        "block": {
          "useMaxWidth": true,
          "padding": 8
        },
        "packet": {
          "useMaxWidth": true,
          "rowHeight": 32,
          "bitWidth": 32,
          "bitsPerRow": 32,
          "showBits": true,
          "paddingX": 5,
          "paddingY": 5
        },
        "architecture": {
          "useMaxWidth": true,
          "padding": 40,
          "iconSize": 80,
          "fontSize": 16
        },
        "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"
        },
        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
        },
        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"),
          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
        }
      };
      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 sanitizeDirective, sanitizeCss;
  var init_sanitizeDirective = __esm({
    "src/utils/sanitizeDirective.ts"() {
      "use strict";
      init_defaultConfig();
      init_logger();
      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") {
            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, siteConfig, configFromInitialize, directives, currentConfig, updateCurrentConfig, setSiteConfig, saveConfigFromInitialize, updateSiteConfig, getSiteConfig, setConfig, getConfig, sanitize, addDirective, reset, ConfigWarning, issuedWarnings, issueWarning, checkConfig;
  var init_config = __esm({
    "src/config.ts"() {
      "use strict";
      init_assignWithDepth();
      init_logger();
      init_themes();
      init_defaultConfig();
      init_sanitizeDirective();
      defaultConfig = Object.freeze(defaultConfig_default);
      siteConfig = assignWithDepth_default({}, defaultConfig);
      directives = [];
      currentConfig = assignWithDepth_default({}, defaultConfig);
      updateCurrentConfig = /* @__PURE__ */ __name((siteCfg, _directives) => {
        let cfg = assignWithDepth_default({}, siteCfg);
        let sumOfDirectives = {};
        for (const d2 of _directives) {
          sanitize(d2);
          sumOfDirectives = assignWithDepth_default(sumOfDirectives, d2);
        }
        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((conf7) => {
        siteConfig = assignWithDepth_default({}, defaultConfig);
        siteConfig = assignWithDepth_default(siteConfig, conf7);
        if (conf7.theme && themes_default[conf7.theme]) {
          siteConfig.themeVariables = themes_default[conf7.theme].getThemeVariables(conf7.themeVariables);
        }
        updateCurrentConfig(siteConfig, directives);
        return siteConfig;
      }, "setSiteConfig");
      saveConfigFromInitialize = /* @__PURE__ */ __name((conf7) => {
        configFromInitialize = assignWithDepth_default({}, conf7);
      }, "saveConfigFromInitialize");
      updateSiteConfig = /* @__PURE__ */ __name((conf7) => {
        siteConfig = assignWithDepth_default(siteConfig, conf7);
        updateCurrentConfig(siteConfig, directives);
        return siteConfig;
      }, "updateSiteConfig");
      getSiteConfig = /* @__PURE__ */ __name(() => {
        return assignWithDepth_default({}, siteConfig);
      }, "getSiteConfig");
      setConfig = /* @__PURE__ */ __name((conf7) => {
        checkConfig(conf7);
        assignWithDepth_default(currentConfig, conf7);
        return getConfig();
      }, "setConfig");
      getConfig = /* @__PURE__ */ __name(() => {
        return assignWithDepth_default({}, currentConfig);
      }, "getConfig");
      sanitize = /* @__PURE__ */ __name((options3) => {
        if (!options3) {
          return;
        }
        ["secure", ...siteConfig.secure ?? []].forEach((key) => {
          if (Object.hasOwn(options3, key)) {
            log.debug(`Denied attempt to modify a secure key ${key}`, options3[key]);
            delete options3[key];
          }
        });
        Object.keys(options3).forEach((key) => {
          if (key.startsWith("__")) {
            delete options3[key];
          }
        });
        Object.keys(options3).forEach((key) => {
          if (typeof options3[key] === "string" && (options3[key].includes("<") || options3[key].includes(">") || options3[key].includes("url(data:"))) {
            delete options3[key];
          }
          if (typeof options3[key] === "object") {
            sanitize(options3[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((config6 = siteConfig) => {
        directives = [];
        updateCurrentConfig(config6, directives);
      }, "reset");
      ConfigWarning = {
        LAZY_LOAD_DEPRECATED: "The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead."
      };
      issuedWarnings = {};
      issueWarning = /* @__PURE__ */ __name((warning) => {
        if (issuedWarnings[warning]) {
          return;
        }
        log.warn(ConfigWarning[warning]);
        issuedWarnings[warning] = true;
      }, "issueWarning");
      checkConfig = /* @__PURE__ */ __name((config6) => {
        if (!config6) {
          return;
        }
        if (config6.lazyLoadedDiagrams || config6.loadExternalDiagramsAtStartup) {
          issueWarning("LAZY_LOAD_DEPRECATED");
        }
      }, "checkConfig");
    }
  });

  // ../../node_modules/.pnpm/[email protected]/node_modules/dompurify/dist/purify.js
  var require_purify = __commonJS({
    "../../node_modules/.pnpm/[email protected]/node_modules/dompurify/dist/purify.js"(exports2, module2) {
      "use strict";
      (function(global2, factory) {
        typeof exports2 === "object" && typeof module2 !== "undefined" ? module2.exports = factory() : typeof define === "function" && define.amd ? define(factory) : (global2 = typeof globalThis !== "undefined" ? globalThis : global2 || self, global2.DOMPurify = factory());
      })(exports2, function() {
        "use strict";
        const {
          entries,
          setPrototypeOf,
          isFrozen,
          getPrototypeOf,
          getOwnPropertyDescriptor
        } = Object;
        let {
          freeze,
          seal,
          create: create2
        } = Object;
        let {
          apply: apply4,
          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 (!apply4) {
          apply4 = /* @__PURE__ */ __name(function apply5(fun, thisValue, args) {
            return fun.apply(thisValue, args);
          }, "apply");
        }
        if (!construct) {
          construct = /* @__PURE__ */ __name(function construct2(Func, args) {
            return new Func(...args);
          }, "construct");
        }
        const arrayForEach = unapply(Array.prototype.forEach);
        const arrayPop = unapply(Array.prototype.pop);
        const arrayPush2 = unapply(Array.prototype.push);
        const stringToLowerCase = unapply(String.prototype.toLowerCase);
        const stringToString = unapply(String.prototype.toString);
        const stringMatch = unapply(String.prototype.match);
        const stringReplace = unapply(String.prototype.replace);
        const stringIndexOf = unapply(String.prototype.indexOf);
        const stringTrim = unapply(String.prototype.trim);
        const objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);
        const regExpTest = unapply(RegExp.prototype.test);
        const typeErrorCreate = unconstruct(TypeError);
        function unapply(func) {
          return function(thisArg) {
            for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
              args[_key - 1] = arguments[_key];
            }
            return apply4(func, thisArg, args);
          };
        }
        __name(unapply, "unapply");
        function unconstruct(func) {
          return function() {
            for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
              args[_key2] = arguments[_key2];
            }
            return construct(func, args);
          };
        }
        __name(unconstruct, "unconstruct");
        function addToSet(set6, array4) {
          let transformCaseFunc = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : stringToLowerCase;
          if (setPrototypeOf) {
            setPrototypeOf(set6, null);
          }
          let l2 = array4.length;
          while (l2--) {
            let element3 = array4[l2];
            if (typeof element3 === "string") {
              const lcElement = transformCaseFunc(element3);
              if (lcElement !== element3) {
                if (!isFrozen(array4)) {
                  array4[l2] = lcElement;
                }
                element3 = lcElement;
              }
            }
            set6[element3] = true;
          }
          return set6;
        }
        __name(addToSet, "addToSet");
        function cleanArray(array4) {
          for (let index = 0; index < array4.length; index++) {
            const isPropertyExist = objectHasOwnProperty(array4, index);
            if (!isPropertyExist) {
              array4[index] = null;
            }
          }
          return array4;
        }
        __name(cleanArray, "cleanArray");
        function clone5(object3) {
          const newObject = create2(null);
          for (const [property2, value2] of entries(object3)) {
            const isPropertyExist = objectHasOwnProperty(object3, property2);
            if (isPropertyExist) {
              if (Array.isArray(value2)) {
                newObject[property2] = cleanArray(value2);
              } else if (value2 && typeof value2 === "object" && value2.constructor === Object) {
                newObject[property2] = clone5(value2);
              } else {
                newObject[property2] = value2;
              }
            }
          }
          return newObject;
        }
        __name(clone5, "clone");
        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;
        }
        __name(lookupGetter, "lookupGetter");
        const 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", "section", "select", "shadow", "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"]);
        const svg$1 = freeze(["svg", "a", "altglyph", "altglyphdef", "altglyphitem", "animatecolor", "animatemotion", "animatetransform", "circle", "clippath", "defs", "desc", "ellipse", "filter", "font", "g", "glyph", "glyphref", "hkern", "image", "line", "lineargradient", "marker", "mask", "metadata", "mpath", "path", "pattern", "polygon", "polyline", "radialgradient", "rect", "stop", "style", "switch", "symbol", "text", "textpath", "title", "tref", "tspan", "view", "vkern"]);
        const 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"]);
        const 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"]);
        const 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"]);
        const mathMlDisallowed = freeze(["maction", "maligngroup", "malignmark", "mlongdiv", "mscarries", "mscarry", "msgroup", "mstack", "msline", "msrow", "semantics", "annotation", "annotation-xml", "mprescripts", "none"]);
        const text3 = freeze(["#text"]);
        const html2 = 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", "face", "for", "headers", "height", "hidden", "high", "href", "hreflang", "id", "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", "pattern", "placeholder", "playsinline", "popover", "popovertarget", "popovertargetaction", "poster", "preload", "pubdate", "radiogroup", "readonly", "rel", "required", "rev", "reversed", "role", "rows", "rowspan", "spellcheck", "scope", "selected", "shape", "size", "sizes", "span", "srclang", "start", "src", "srcset", "step", "style", "summary", "tabindex", "title", "translate", "type", "usemap", "valign", "value", "width", "wrap", "xmlns", "slot"]);
        const svg = freeze(["accent-height", "accumulate", "additive", "alignment-baseline", "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", "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", "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", "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", "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", "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"]);
        const mathMl = freeze(["accent", "accentunder", "align", "bevelled", "close", "columnsalign", "columnlines", "columnspan", "denomalign", "depth", "dir", "display", "displaystyle", "encoding", "fence", "frame", "height", "href", "id", "largeop", "length", "linethickness", "lspace", "lquote", "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"]);
        const xml = freeze(["xlink:href", "xml:id", "xlink:title", "xml:space", "xmlns:xlink"]);
        const MUSTACHE_EXPR = seal(/\{\{[\w\W]*|[\w\W]*\}\}/gm);
        const ERB_EXPR = seal(/<%[\w\W]*|[\w\W]*%>/gm);
        const TMPLIT_EXPR = seal(/\${[\w\W]*}/gm);
        const DATA_ATTR = seal(/^data-[\-\w.\u00B7-\uFFFF]/);
        const ARIA_ATTR = seal(/^aria-[\-\w]+$/);
        const IS_ALLOWED_URI = seal(
          /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i
          // eslint-disable-line no-useless-escape
        );
        const IS_SCRIPT_OR_DATA = seal(/^(?:\w+script|data):/i);
        const ATTR_WHITESPACE = seal(
          /[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g
          // eslint-disable-line no-control-regex
        );
        const DOCTYPE_NAME = seal(/^html$/i);
        const CUSTOM_ELEMENT = seal(/^[a-z][.\w]*(-[.\w]+)+$/i);
        var EXPRESSIONS = /* @__PURE__ */ Object.freeze({
          __proto__: null,
          MUSTACHE_EXPR,
          ERB_EXPR,
          TMPLIT_EXPR,
          DATA_ATTR,
          ARIA_ATTR,
          IS_ALLOWED_URI,
          IS_SCRIPT_OR_DATA,
          ATTR_WHITESPACE,
          DOCTYPE_NAME,
          CUSTOM_ELEMENT
        });
        const NODE_TYPE = {
          element: 1,
          attribute: 2,
          text: 3,
          cdataSection: 4,
          entityReference: 5,
          // Deprecated
          entityNode: 6,
          // Deprecated
          progressingInstruction: 7,
          comment: 8,
          document: 9,
          documentType: 10,
          documentFragment: 11,
          notation: 12
          // Deprecated
        };
        const getGlobal = /* @__PURE__ */ __name(function getGlobal2() {
          return typeof window === "undefined" ? null : window;
        }, "getGlobal");
        const _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(html3) {
                return html3;
              },
              createScriptURL(scriptUrl) {
                return scriptUrl;
              }
            });
          } catch (_2) {
            console.warn("TrustedTypes policy " + policyName + " could not be created.");
            return null;
          }
        }, "_createTrustedTypesPolicy");
        function createDOMPurify() {
          let window3 = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : getGlobal();
          const DOMPurify3 = /* @__PURE__ */ __name((root4) => createDOMPurify(root4), "DOMPurify");
          DOMPurify3.version = "3.1.6";
          DOMPurify3.removed = [];
          if (!window3 || !window3.document || window3.document.nodeType !== NODE_TYPE.document) {
            DOMPurify3.isSupported = false;
            return DOMPurify3;
          }
          let {
            document: document2
          } = window3;
          const originalDocument = document2;
          const currentScript = originalDocument.currentScript;
          const {
            DocumentFragment: DocumentFragment2,
            HTMLTemplateElement,
            Node,
            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 = {};
          DOMPurify3.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, ...text3]);
          let ALLOWED_ATTR = null;
          const DEFAULT_ALLOWED_ATTR = addToSet({}, [...html2, ...svg, ...mathMl, ...xml]);
          let CUSTOM_ELEMENT_HANDLING = Object.seal(create2(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;
          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 NAMESPACE = HTML_NAMESPACE;
          let IS_EMPTY_INPUT = false;
          let ALLOWED_NAMESPACES = null;
          const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);
          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 = clone5(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(
              clone5(DEFAULT_URI_SAFE_ATTRIBUTES),
              // eslint-disable-line indent
              cfg.ADD_URI_SAFE_ATTR,
              // eslint-disable-line indent
              transformCaseFunc
              // eslint-disable-line indent
            ) : DEFAULT_URI_SAFE_ATTRIBUTES;
            DATA_URI_TAGS = objectHasOwnProperty(cfg, "ADD_DATA_URI_TAGS") ? addToSet(
              clone5(DEFAULT_DATA_URI_TAGS),
              // eslint-disable-line indent
              cfg.ADD_DATA_URI_TAGS,
              // eslint-disable-line indent
              transformCaseFunc
              // eslint-disable-line indent
            ) : 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) : {};
            FORBID_ATTR = objectHasOwnProperty(cfg, "FORBID_ATTR") ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : {};
            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;
            NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;
            CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};
            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({}, text3);
              ALLOWED_ATTR = [];
              if (USE_PROFILES.html === true) {
                addToSet(ALLOWED_TAGS, html$1);
                addToSet(ALLOWED_ATTR, html2);
              }
              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);
              }
            }
            if (cfg.ADD_TAGS) {
              if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {
                ALLOWED_TAGS = clone5(ALLOWED_TAGS);
              }
              addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);
            }
            if (cfg.ADD_ATTR) {
              if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {
                ALLOWED_ATTR = clone5(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 = clone5(FORBID_CONTENTS);
              }
              addToSet(FORBID_CONTENTS, cfg.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 MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ["mi", "mo", "mn", "ms", "mtext"]);
          const HTML_INTEGRATION_POINTS = addToSet({}, ["foreignobject", "annotation-xml"]);
          const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ["title", "style", "font", "a", "script"]);
          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: NAMESPACE,
                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) {
            arrayPush2(DOMPurify3.removed, {
              element: node2
            });
            try {
              getParentNode(node2).removeChild(node2);
            } catch (_2) {
              remove3(node2);
            }
          }, "_forceRemove");
          const _removeAttribute = /* @__PURE__ */ __name(function _removeAttribute2(name, node2) {
            try {
              arrayPush2(DOMPurify3.removed, {
                attribute: node2.getAttributeNode(name),
                from: node2
              });
            } catch (_2) {
              arrayPush2(DOMPurify3.removed, {
                attribute: null,
                from: node2
              });
            }
            node2.removeAttribute(name);
            if (name === "is" && !ALLOWED_ATTR[name]) {
              if (RETURN_DOM || RETURN_DOM_FRAGMENT) {
                try {
                  _forceRemove(node2);
                } catch (_2) {
                }
              } else {
                try {
                  node2.setAttribute(name, "");
                } catch (_2) {
                }
              }
            }
          }, "_removeAttribute");
          const _initDocument = /* @__PURE__ */ __name(function _initDocument2(dirty) {
            let doc = null;
            let leadingWhitespace = null;
            if (FORCE_BODY) {
              dirty = "" + dirty;
            } else {
              const matches33 = stringMatch(dirty, /^[\r\n\t ]+/);
              leadingWhitespace = matches33 && matches33[0];
            }
            if (PARSER_MEDIA_TYPE === "application/xhtml+xml" && NAMESPACE === HTML_NAMESPACE) {
              dirty = '' + dirty + "";
            }
            const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;
            if (NAMESPACE === HTML_NAMESPACE) {
              try {
                doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);
              } catch (_2) {
              }
            }
            if (!doc || !doc.documentElement) {
              doc = implementation.createDocument(NAMESPACE, "template", null);
              try {
                doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;
              } catch (_2) {
              }
            }
            const body = doc.body || doc.documentElement;
            if (dirty && leadingWhitespace) {
              body.insertBefore(document2.createTextNode(leadingWhitespace), body.childNodes[0] || null);
            }
            if (NAMESPACE === 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(elm) {
            return elm instanceof HTMLFormElement && (typeof elm.nodeName !== "string" || typeof elm.textContent !== "string" || typeof elm.removeChild !== "function" || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== "function" || typeof elm.setAttribute !== "function" || typeof elm.namespaceURI !== "string" || typeof elm.insertBefore !== "function" || typeof elm.hasChildNodes !== "function");
          }, "_isClobbered");
          const _isNode = /* @__PURE__ */ __name(function _isNode2(object3) {
            return typeof Node === "function" && object3 instanceof Node;
          }, "_isNode");
          const _executeHook = /* @__PURE__ */ __name(function _executeHook2(entryPoint, currentNode, data5) {
            if (!hooks[entryPoint]) {
              return;
            }
            arrayForEach(hooks[entryPoint], (hook2) => {
              hook2.call(DOMPurify3, currentNode, data5, CONFIG);
            });
          }, "_executeHook");
          const _sanitizeElements = /* @__PURE__ */ __name(function _sanitizeElements2(currentNode) {
            let content = null;
            _executeHook("beforeSanitizeElements", currentNode, null);
            if (_isClobbered(currentNode)) {
              _forceRemove(currentNode);
              return true;
            }
            const tagName = transformCaseFunc(currentNode.nodeName);
            _executeHook("uponSanitizeElement", currentNode, {
              tagName,
              allowedTags: ALLOWED_TAGS
            });
            if (currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\w]/g, currentNode.innerHTML) && regExpTest(/<[/\w]/g, currentNode.textContent)) {
              _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 (!ALLOWED_TAGS[tagName] || FORBID_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) {
                arrayPush2(DOMPurify3.removed, {
                  element: currentNode.cloneNode()
                });
                currentNode.textContent = content;
              }
            }
            _executeHook("afterSanitizeElements", currentNode, null);
            return false;
          }, "_sanitizeElements");
          const _isValidAttribute = /* @__PURE__ */ __name(function _isValidAttribute2(lcTag, lcName, value2) {
            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 (!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)) || // 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) {
            _executeHook("beforeSanitizeAttributes", currentNode, null);
            const {
              attributes
            } = currentNode;
            if (!attributes) {
              return;
            }
            const hookEvent = {
              attrName: "",
              attrValue: "",
              keepAttr: true,
              allowedAttributes: ALLOWED_ATTR
            };
            let l2 = attributes.length;
            while (l2--) {
              const attr = attributes[l2];
              const {
                name,
                namespaceURI,
                value: attrValue
              } = attr;
              const lcName = transformCaseFunc(name);
              let value2 = name === "value" ? attrValue : stringTrim(attrValue);
              hookEvent.attrName = lcName;
              hookEvent.attrValue = value2;
              hookEvent.keepAttr = true;
              hookEvent.forceKeepAttr = void 0;
              _executeHook("uponSanitizeAttribute", currentNode, hookEvent);
              value2 = hookEvent.attrValue;
              if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\/(style|title)/i, value2)) {
                _removeAttribute(name, currentNode);
                continue;
              }
              if (hookEvent.forceKeepAttr) {
                continue;
              }
              _removeAttribute(name, currentNode);
              if (!hookEvent.keepAttr) {
                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)) {
                continue;
              }
              if (SANITIZE_NAMED_PROPS && (lcName === "id" || lcName === "name")) {
                _removeAttribute(name, currentNode);
                value2 = SANITIZE_NAMED_PROPS_PREFIX + value2;
              }
              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;
                    }
                  }
                }
              }
              try {
                if (namespaceURI) {
                  currentNode.setAttributeNS(namespaceURI, name, value2);
                } else {
                  currentNode.setAttribute(name, value2);
                }
                if (_isClobbered(currentNode)) {
                  _forceRemove(currentNode);
                } else {
                  arrayPop(DOMPurify3.removed);
                }
              } catch (_2) {
              }
            }
            _executeHook("afterSanitizeAttributes", currentNode, null);
          }, "_sanitizeAttributes");
          const _sanitizeShadowDOM = /* @__PURE__ */ __name(function _sanitizeShadowDOM2(fragment) {
            let shadowNode = null;
            const shadowIterator = _createNodeIterator(fragment);
            _executeHook("beforeSanitizeShadowDOM", fragment, null);
            while (shadowNode = shadowIterator.nextNode()) {
              _executeHook("uponSanitizeShadowNode", shadowNode, null);
              if (_sanitizeElements(shadowNode)) {
                continue;
              }
              if (shadowNode.content instanceof DocumentFragment2) {
                _sanitizeShadowDOM2(shadowNode.content);
              }
              _sanitizeAttributes(shadowNode);
            }
            _executeHook("afterSanitizeShadowDOM", fragment, null);
          }, "_sanitizeShadowDOM");
          DOMPurify3.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 (!DOMPurify3.isSupported) {
              return dirty;
            }
            if (!SET_CONFIG) {
              _parseConfig(cfg);
            }
            DOMPurify3.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 Node) {
              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()) {
              if (_sanitizeElements(currentNode)) {
                continue;
              }
              if (currentNode.content instanceof DocumentFragment2) {
                _sanitizeShadowDOM(currentNode.content);
              }
              _sanitizeAttributes(currentNode);
            }
            if (IN_PLACE) {
              return dirty;
            }
            if (RETURN_DOM) {
              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 = "\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;
          };
          DOMPurify3.setConfig = function() {
            let cfg = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
            _parseConfig(cfg);
            SET_CONFIG = true;
          };
          DOMPurify3.clearConfig = function() {
            CONFIG = null;
            SET_CONFIG = false;
          };
          DOMPurify3.isValidAttribute = function(tag2, attr, value2) {
            if (!CONFIG) {
              _parseConfig({});
            }
            const lcTag = transformCaseFunc(tag2);
            const lcName = transformCaseFunc(attr);
            return _isValidAttribute(lcTag, lcName, value2);
          };
          DOMPurify3.addHook = function(entryPoint, hookFunction) {
            if (typeof hookFunction !== "function") {
              return;
            }
            hooks[entryPoint] = hooks[entryPoint] || [];
            arrayPush2(hooks[entryPoint], hookFunction);
          };
          DOMPurify3.removeHook = function(entryPoint) {
            if (hooks[entryPoint]) {
              return arrayPop(hooks[entryPoint]);
            }
          };
          DOMPurify3.removeHooks = function(entryPoint) {
            if (hooks[entryPoint]) {
              hooks[entryPoint] = [];
            }
          };
          DOMPurify3.removeAllHooks = function() {
            hooks = {};
          };
          return DOMPurify3;
        }
        __name(createDOMPurify, "createDOMPurify");
        var purify = createDOMPurify();
        return purify;
      });
    }
  });

  // ../../node_modules/.pnpm/[email protected]/node_modules/katex/dist/katex.mjs
  var katex_exports = {};
  __export(katex_exports, {
    default: () => katex
  });
  function escape2(text3) {
    return String(text3).replace(ESCAPE_REGEX, (match2) => ESCAPE_LOOKUP[match2]);
  }
  function getDefaultValue(schema2) {
    if (schema2.default) {
      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 block3 = script.blocks[_i];
        if (codepoint >= block3[0] && codepoint <= block3[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 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(size5) {
    var sizeIndex;
    if (size5 >= 5) {
      sizeIndex = 0;
    } else if (size5 >= 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 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 but got " + String(group2) + ".");
    }
  }
  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 data5 = {
      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]] = data5;
    }
    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, options3) {
    var body = makeSpan$1(["base"], children2, options3);
    var strut = makeSpan$1(["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, options3) {
    var tag2 = null;
    if (tree.length === 1 && tree[0].type === "tag") {
      tag2 = tree[0].tag;
      tree = tree[0].body;
    }
    var expression = buildExpression$1(tree, options3, "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, options3));
          parts = [];
        }
      } else if (expression[i2].hasClass("newline")) {
        parts.pop();
        if (parts.length > 0) {
          children2.push(buildHTMLUnbreakable(parts, options3));
          parts = [];
        }
        children2.push(expression[i2]);
      }
    }
    if (parts.length > 0) {
      children2.push(buildHTMLUnbreakable(parts, options3));
    }
    var tagChild;
    if (tag2) {
      tagChild = buildHTMLUnbreakable(buildExpression$1(tag2, options3, true));
      tagChild.classes = ["tag"];
      children2.push(tagChild);
    } else if (eqnNum) {
      children2.push(eqnNum);
    }
    var htmlNode = makeSpan$1(["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 buildMathML(tree, texExpression, options3, isDisplayMode, forMathmlOnly) {
    var expression = buildExpression2(tree, options3);
    var wrapper;
    if (expression.length === 1 && expression[0] instanceof MathNode && utils.contains(["mrow", "mtable"], expression[0].type)) {
      wrapper = expression[0];
    } else {
      wrapper = new mathMLTree.MathNode("mrow", expression);
    }
    var annotation = new mathMLTree.MathNode("annotation", [new mathMLTree.TextNode(texExpression)]);
    annotation.setAttribute("encoding", "application/x-tex");
    var semantics = new mathMLTree.MathNode("semantics", [wrapper, annotation]);
    var math2 = new mathMLTree.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 buildCommon.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, options3) {
    var elements4 = buildExpression$1(group2.body, options3, true);
    return makeSpan2([group2.mclass], elements4, options3);
  }
  function mathmlBuilder$8(group2, options3) {
    var node2;
    var inner2 = buildExpression2(group2.body, options3);
    if (group2.mclass === "minner") {
      node2 = new mathMLTree.MathNode("mpadded", inner2);
    } else if (group2.mclass === "mord") {
      if (group2.isCharacterBox) {
        node2 = inner2[0];
        node2.type = "mi";
      } else {
        node2 = new mathMLTree.MathNode("mi", inner2);
      }
    } else {
      if (group2.isCharacterBox) {
        node2 = inner2[0];
        node2.type = "mo";
      } else {
        node2 = new mathMLTree.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, parser23) {
    var funcName = cdArrowFunctionName[arrowChar];
    switch (funcName) {
      case "\\\\cdrightarrow":
      case "\\\\cdleftarrow":
        return parser23.callFunction(funcName, [labels[0]], [labels[1]]);
      case "\\uparrow":
      case "\\downarrow": {
        var leftLabel = parser23.callFunction("\\\\cdleft", [labels[0]], []);
        var bareArrow = {
          type: "atom",
          text: funcName,
          mode: "math",
          family: "rel"
        };
        var sizedArrow = parser23.callFunction("\\Big", [bareArrow], []);
        var rightLabel = parser23.callFunction("\\\\cdright", [labels[1]], []);
        var arrowGroup = {
          type: "ordgroup",
          mode: "math",
          body: [leftLabel, sizedArrow, rightLabel]
        };
        return parser23.callFunction("\\\\cdparent", [arrowGroup], []);
      }
      case "\\\\cdlongequal":
        return parser23.callFunction("\\\\cdlongequal", [], []);
      case "\\Vert": {
        var arrow = {
          type: "textord",
          text: "\\Vert",
          mode: "math"
        };
        return parser23.callFunction("\\Big", [arrow], []);
      }
      default:
        return {
          type: "textord",
          text: " ",
          mode: "math"
        };
    }
  }
  function parseCD(parser23) {
    var parsedRows = [];
    parser23.gullet.beginGroup();
    parser23.gullet.macros.set("\\cr", "\\\\\\relax");
    parser23.gullet.beginGroup();
    while (true) {
      parsedRows.push(parser23.parseExpression(false, "\\\\"));
      parser23.gullet.endGroup();
      parser23.gullet.beginGroup();
      var next3 = parser23.fetch().text;
      if (next3 === "&" || next3 === "\\\\") {
        parser23.consume();
      } else if (next3 === "\\end") {
        if (parsedRows[parsedRows.length - 1].length === 0) {
          parsedRows.pop();
        }
        break;
      } else {
        throw new ParseError("Expected \\\\ or \\cr or \\end", parser23.nextToken);
      }
    }
    var row = [];
    var body = [row];
    for (var i2 = 0; i2 < parsedRows.length; i2++) {
      var rowNodes = parsedRows[i2];
      var cell = newCell();
      for (var j2 = 0; j2 < rowNodes.length; j2++) {
        if (!isStartOfArrow(rowNodes[j2])) {
          cell.body.push(rowNodes[j2]);
        } else {
          row.push(cell);
          j2 += 1;
          var arrowChar = assertSymbolNodeType(rowNodes[j2]).text;
          var labels = new Array(2);
          labels[0] = {
            type: "ordgroup",
            mode: "math",
            body: []
          };
          labels[1] = {
            type: "ordgroup",
            mode: "math",
            body: []
          };
          if ("=|.".indexOf(arrowChar) > -1) ;
          else if ("<>AV".indexOf(arrowChar) > -1) {
            for (var labelNum = 0; labelNum < 2; labelNum++) {
              var inLabel = true;
              for (var k2 = j2 + 1; k2 < rowNodes.length; k2++) {
                if (isLabelEnd(rowNodes[k2], arrowChar)) {
                  inLabel = false;
                  j2 = 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[j2]);
              }
            }
          } else {
            throw new ParseError('Expected one of "<>AV=|." after @', rowNodes[j2]);
          }
          var arrow = cdArrow(arrowChar, labels, parser23);
          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);
    }
    parser23.gullet.endGroup();
    parser23.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 && utils.contains(delimiters, 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 data5 = {
      type: type3,
      numArgs: props.numArgs || 0,
      allowedInText: false,
      numOptionalArgs: 0,
      handler
    };
    for (var i2 = 0; i2 < names.length; ++i2) {
      _environments[names[i2]] = data5;
    }
    if (htmlBuilder3) {
      _htmlGroupBuilders[type3] = htmlBuilder3;
    }
    if (mathmlBuilder3) {
      _mathmlGroupBuilders[type3] = mathmlBuilder3;
    }
  }
  function defineMacro(name, body) {
    _macros[name] = body;
  }
  function getHLines(parser23) {
    var hlineInfo = [];
    parser23.consumeSpaces();
    var nxt = parser23.fetch().text;
    if (nxt === "\\relax") {
      parser23.consume();
      parser23.consumeSpaces();
      nxt = parser23.fetch().text;
    }
    while (nxt === "\\hline" || nxt === "\\hdashline") {
      parser23.consume();
      hlineInfo.push(nxt === "\\hdashline");
      parser23.consumeSpaces();
      nxt = parser23.fetch().text;
    }
    return hlineInfo;
  }
  function getAutoTag(name) {
    if (name.indexOf("ed") === -1) {
      return name.indexOf("*") === -1;
    }
  }
  function parseArray(parser23, _ref, style3) {
    var {
      hskipBeforeAndAfter,
      addJot,
      cols,
      arraystretch,
      colSeparationType,
      autoTag,
      singleRow,
      emptySingleRow,
      maxNumCols,
      leqno
    } = _ref;
    parser23.gullet.beginGroup();
    if (!singleRow) {
      parser23.gullet.macros.set("\\cr", "\\\\\\relax");
    }
    if (!arraystretch) {
      var stretch = parser23.gullet.expandMacroAsText("\\arraystretch");
      if (stretch == null) {
        arraystretch = 1;
      } else {
        arraystretch = parseFloat(stretch);
        if (!arraystretch || arraystretch < 0) {
          throw new ParseError("Invalid \\arraystretch: " + stretch);
        }
      }
    }
    parser23.gullet.beginGroup();
    var row = [];
    var body = [row];
    var rowGaps = [];
    var hLinesBeforeRow = [];
    var tags2 = autoTag != null ? [] : void 0;
    function beginRow() {
      if (autoTag) {
        parser23.gullet.macros.set("\\@eqnsw", "1", true);
      }
    }
    __name(beginRow, "beginRow");
    function endRow() {
      if (tags2) {
        if (parser23.gullet.macros.get("\\df@tag")) {
          tags2.push(parser23.subparse([new Token("\\df@tag")]));
          parser23.gullet.macros.set("\\df@tag", void 0, true);
        } else {
          tags2.push(Boolean(autoTag) && parser23.gullet.macros.get("\\@eqnsw") === "1");
        }
      }
    }
    __name(endRow, "endRow");
    beginRow();
    hLinesBeforeRow.push(getHLines(parser23));
    while (true) {
      var cell = parser23.parseExpression(false, singleRow ? "\\end" : "\\\\");
      parser23.gullet.endGroup();
      parser23.gullet.beginGroup();
      cell = {
        type: "ordgroup",
        mode: parser23.mode,
        body: cell
      };
      if (style3) {
        cell = {
          type: "styling",
          mode: parser23.mode,
          style: style3,
          body: [cell]
        };
      }
      row.push(cell);
      var next3 = parser23.fetch().text;
      if (next3 === "&") {
        if (maxNumCols && row.length === maxNumCols) {
          if (singleRow || colSeparationType) {
            throw new ParseError("Too many tab characters: &", parser23.nextToken);
          } else {
            parser23.settings.reportNonstrict("textEnv", "Too few columns specified in the {array} column argument.");
          }
        }
        parser23.consume();
      } else if (next3 === "\\end") {
        endRow();
        if (row.length === 1 && cell.type === "styling" && cell.body[0].body.length === 0 && (body.length > 1 || !emptySingleRow)) {
          body.pop();
        }
        if (hLinesBeforeRow.length < body.length + 1) {
          hLinesBeforeRow.push([]);
        }
        break;
      } else if (next3 === "\\\\") {
        parser23.consume();
        var size5 = void 0;
        if (parser23.gullet.future().text !== " ") {
          size5 = parser23.parseSizeGroup(true);
        }
        rowGaps.push(size5 ? size5.value : null);
        endRow();
        hLinesBeforeRow.push(getHLines(parser23));
        row = [];
        body.push(row);
        beginRow();
      } else {
        throw new ParseError("Expected & or \\\\ or \\cr or \\end", parser23.nextToken);
      }
    }
    parser23.gullet.endGroup();
    parser23.gullet.endGroup();
    return {
      type: "array",
      mode: parser23.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, options3, baseOptions) {
    var inner2 = buildExpression$1(value2, options3, false);
    var multiplier = options3.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, options3.sizingClasses(baseOptions));
      } else if (inner2[i2].classes[pos + 1] === "reset-size" + options3.size) {
        inner2[i2].classes[pos + 1] = "reset-size" + baseOptions.size;
      }
      inner2[i2].height *= multiplier;
      inner2[i2].depth *= multiplier;
    }
    return buildCommon.makeFragment(inner2);
  }
  var SourceLocation, Token, ParseError, contains, deflt, uppercase, hyphenate, ESCAPE_LOOKUP, ESCAPE_REGEX, getBaseElem, isCharacterBox, assert, protocolFromUrl, utils, SETTINGS_SCHEMA, Settings, Style, D, Dc, T, Tc, S, Sc, SS, SSc, styles, sup, sub, fracNum, fracDen, cramp, text$1, Style$1, scriptData, allBlocks, hLinePad, sqrtMain, sqrtSize1, sqrtSize2, sqrtSize3, sqrtSize4, phasePath, sqrtTall, sqrtPath, innerPath, path, tallDelim, DocumentFragment, fontMetricsData, sigmasAndXis, extraCharacterMap, fontMetricsBySizeIndex, sizeStyleMap, sizeMultipliers, sizeAtStyle, Options, ptPerUnit, relativeUnit, validUnit, calculateSize2, makeEm, createClass, initNode, toNode, toMarkup, Span, Anchor, Img, iCombinations, SymbolNode, SvgNode, PathNode, LineNode, ATOMS, NON_ATOMS, symbols, math, text, 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$2, makeSvgSpan, makeLineSpan, makeAnchor, makeFragment, wrapFragment, getVListChildrenAndDepth, makeVList, makeGlue, retrieveTextFontName, fontMap, svgData, staticSvg, buildCommon, thinspace, mediumspace, thickspace, spacings, tightSpacings, _functions, _htmlGroupBuilders, _mathmlGroupBuilders, normalizeArgument, ordargument, makeSpan$1, binLeftCanceller, binRightCanceller, styleMap$1, DomEnum, buildExpression$1, traverseNonSpaceNodes, checkPartialGroup, getOutermostNode, getTypeOfDomTree, makeNullDelimiter, buildGroup$1, MathNode, TextNode, SpaceNode, mathMLTree, makeText, makeRow, getVariant, buildExpression2, buildExpressionRow, buildGroup2, optionsFromSettings, displayWrap, buildTree, buildHTMLTree, stretchyCodePoint, mathMLnode, katexImagesData, groupLength, svgSpan, encloseSpan, stretchy, htmlBuilder$a, mathmlBuilder$9, NON_STRETCHY_ACCENT_REGEX, paddedNode, makeSpan2, 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, delimiter, delimiterSizes, delimiters, htmlBuilder$7, mathmlBuilder$6, _environments, _macros, validateAmsEnvironmentContext, htmlBuilder$6, alignMap, mathmlBuilder$5, alignedHandler, environments, htmlBuilder$5, mathmlBuilder$4, fontAliases, adjustStyle, htmlBuilder$4, mathmlBuilder$3, 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, spaceAfterDots, latexRaiseA, braketHelper, implicitCommands, MacroExpander, unicodeSubRegEx, uSubsAndSups, unicodeAccents, unicodeSymbols, Parser, parseTree, render, renderToString, generateParseTree, renderError, renderToDomTree, renderToHTMLTree, katex;
  var init_katex = __esm({
    "../../node_modules/.pnpm/[email protected]/node_modules/katex/dist/katex.mjs"() {
      "use strict";
      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(lexer2, start3, end2) {
          this.lexer = void 0;
          this.start = void 0;
          this.end = void 0;
          this.lexer = lexer2;
          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(text3, loc) {
          this.text = void 0;
          this.loc = void 0;
          this.noexpand = void 0;
          this.treatAsRelax = void 0;
          this.text = text3;
          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, text3) {
          return new _Token(text3, SourceLocation.range(this, endToken));
        }
      };
      ParseError = class _ParseError {
        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) {
          this.name = void 0;
          this.position = void 0;
          this.length = void 0;
          this.rawMessage = void 0;
          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;
          }
          var self2 = new Error(error3);
          self2.name = "ParseError";
          self2.__proto__ = _ParseError.prototype;
          self2.position = start3;
          if (start3 != null && end2 != null) {
            self2.length = end2 - start3;
          }
          self2.rawMessage = message;
          return self2;
        }
      };
      ParseError.prototype.__proto__ = Error.prototype;
      contains = /* @__PURE__ */ __name(function contains2(list2, elem) {
        return list2.indexOf(elem) !== -1;
      }, "contains");
      deflt = /* @__PURE__ */ __name(function deflt2(setting, defaultIfUndefined) {
        return setting === void 0 ? defaultIfUndefined : setting;
      }, "deflt");
      uppercase = /([A-Z])/g;
      hyphenate = /* @__PURE__ */ __name(function hyphenate2(str2) {
        return str2.replace(uppercase, "-$1").toLowerCase();
      }, "hyphenate");
      ESCAPE_LOOKUP = {
        "&": "&",
        ">": ">",
        "<": "<",
        '"': """,
        "'": "'"
      };
      ESCAPE_REGEX = /[&><"']/g;
      __name(escape2, "escape");
      getBaseElem = /* @__PURE__ */ __name(function getBaseElem2(group2) {
        if (group2.type === "ordgroup") {
          if (group2.body.length === 1) {
            return getBaseElem2(group2.body[0]);
          } else {
            return group2;
          }
        } else if (group2.type === "color") {
          if (group2.body.length === 1) {
            return getBaseElem2(group2.body[0]);
          } else {
            return group2;
          }
        } else if (group2.type === "font") {
          return getBaseElem2(group2.body);
        } else {
          return group2;
        }
      }, "getBaseElem");
      isCharacterBox = /* @__PURE__ */ __name(function isCharacterBox2(group2) {
        var baseElem = getBaseElem(group2);
        return baseElem.type === "mathord" || baseElem.type === "textord" || baseElem.type === "atom";
      }, "isCharacterBox");
      assert = /* @__PURE__ */ __name(function assert2(value2) {
        if (!value2) {
          throw new Error("Expected non-null, but got " + String(value2));
        }
        return value2;
      }, "assert");
      protocolFromUrl = /* @__PURE__ */ __name(function protocolFromUrl2(url) {
        var protocol = /^[\x00-\x20]*([^\\/#?]*?)(:|�*58|�*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");
      utils = {
        contains,
        deflt,
        escape: escape2,
        hyphenate,
        getBaseElem,
        isCharacterBox,
        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 "
        },
        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 ",
          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 ",
          cliDescription: "Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",
          cliDefault: [],
          cliProcessor: /* @__PURE__ */ __name((def2, defs2) => {
            defs2.push(def2);
            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 ",
          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 ",
          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 ",
          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(options3) {
          this.displayMode = void 0;
          this.output = void 0;
          this.leqno = void 0;
          this.fleqn = void 0;
          this.throwOnError = void 0;
          this.errorColor = void 0;
          this.macros = void 0;
          this.minRuleThickness = void 0;
          this.colorIsTextColor = void 0;
          this.strict = void 0;
          this.trust = void 0;
          this.maxSize = void 0;
          this.maxExpand = void 0;
          this.globalGroup = void 0;
          options3 = options3 || {};
          for (var prop in SETTINGS_SCHEMA) {
            if (SETTINGS_SCHEMA.hasOwnProperty(prop)) {
              var schema2 = SETTINGS_SCHEMA[prop];
              this[prop] = options3[prop] !== void 0 ? schema2.processor ? schema2.processor(options3[prop]) : options3[prop] : 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 (context.url && !context.protocol) {
            var protocol = utils.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(id28, size5, cramped) {
          this.id = void 0;
          this.size = void 0;
          this.cramped = void 0;
          this.id = id28;
          this.size = size5;
          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((b2) => allBlocks.push(...b2)));
      __name(supportedCodepoint, "supportedCodepoint");
      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(y5) {
        var x5 = y5 / 2;
        return "M400000 " + y5 + " H0 L" + x5 + " 0 l65 45 L145 " + (y5 - 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(size5, extraVinculum, viewBoxHeight) {
        extraVinculum = 1e3 * extraVinculum;
        var path4 = "";
        switch (size5) {
          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 "M291 0 H417 V" + height2 + " H291z M291 0 H417 V" + height2 + " H291z";
          case "\u2223":
            return "M145 0 H188 V" + height2 + " H145z M145 0 H188 V" + height2 + " H145z";
          case "\u2225":
            return "M145 0 H188 V" + height2 + " H145z M145 0 H188 V" + height2 + " H145z" + ("M367 0 H410 V" + height2 + " H367z M367 0 H410 V" + height2 + " H367z");
          case "\u239F":
            return "M457 0 H583 V" + height2 + " H457z M457 0 H583 V" + height2 + " H457z";
          case "\u23A2":
            return "M319 0 H403 V" + height2 + " H319z M319 0 H403 V" + height2 + " H319z";
          case "\u23A5":
            return "M263 0 H347 V" + height2 + " H263z M263 0 H347 V" + height2 + " H263z";
          case "\u23AA":
            return "M384 0 H504 V" + height2 + " H384z M384 0 H504 V" + height2 + " H384z";
          case "\u23D0":
            return "M312 0 H355 V" + height2 + " H312z M312 0 H355 V" + height2 + " H312z";
          case "\u2016":
            return "M257 0 H300 V" + height2 + " H257z M257 0 H300 V" + height2 + " H257z" + ("M478 0 H521 V" + height2 + " H478z 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: "M40 281 V428 H0 V94 H40 V241 H400000 v40z\nM40 281 V428 H0 V94 H40 V241 H400000 v40z",
        leftmapsto: "M40 281 V448H0V74H40V241H400000v40z\nM40 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: "M0 50 h400000 v40H0z m0 194h40000v40H0z\nM0 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: "M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\nM399960 241 V94 h40 V428 h-40 V281 H0 v-40z",
        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");
        }
        // HtmlDomNode
        // Never used; needed for satisfying interface.
        constructor(children2) {
          this.children = void 0;
          this.classes = void 0;
          this.height = void 0;
          this.depth = void 0;
          this.maxFontSize = void 0;
          this.style = void 0;
          this.children = children2;
          this.classes = [];
          this.height = 0;
          this.depth = 0;
          this.maxFontSize = 0;
          this.style = {};
        }
        hasClass(className) {
          return utils.contains(this.classes, 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("");
        }
      };
      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");
      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(size5, style3) {
        return style3.size < 2 ? size5 : sizeStyleMap[size5 - 1][style3.size - 1];
      }, "sizeAtStyle");
      Options = class _Options {
        static {
          __name(this, "Options");
        }
        // A font family applies to a group of fonts (i.e. SansSerif), while a font
        // represents a specific font (i.e. SansSerif Bold).
        // See: https://tex.stackexchange.com/questions/22350/difference-between-textrm-and-mathrm
        /**
         * The base size index.
         */
        constructor(data5) {
          this.style = void 0;
          this.color = void 0;
          this.size = void 0;
          this.textSize = void 0;
          this.phantom = void 0;
          this.font = void 0;
          this.fontFamily = void 0;
          this.fontWeight = void 0;
          this.fontShape = void 0;
          this.sizeMultiplier = void 0;
          this.maxSize = void 0;
          this.minRuleThickness = void 0;
          this._fontMetrics = void 0;
          this.style = data5.style;
          this.color = data5.color;
          this.size = data5.size || _Options.BASESIZE;
          this.textSize = data5.textSize || this.size;
          this.phantom = !!data5.phantom;
          this.font = data5.font || "";
          this.fontFamily = data5.fontFamily || "";
          this.fontWeight = data5.fontWeight || "";
          this.fontShape = data5.fontShape || "";
          this.sizeMultiplier = sizeMultipliers[this.size - 1];
          this.maxSize = data5.maxSize;
          this.minRuleThickness = data5.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 data5 = {
            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
          };
          for (var key in extension5) {
            if (extension5.hasOwnProperty(key)) {
              data5[key] = extension5[key];
            }
          }
          return new _Options(data5);
        }
        /**
         * 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(size5) {
          if (this.size === size5 && this.textSize === size5) {
            return this;
          } else {
            return this.extend({
              style: this.style.text(),
              size: size5,
              textSize: size5,
              sizeMultiplier: sizeMultipliers[size5 - 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 size5;
          switch (this.style.id) {
            case 4:
            case 5:
              size5 = 3;
              break;
            case 6:
            case 7:
              size5 = 1;
              break;
            default:
              size5 = 6;
          }
          return this.extend({
            style: this.style.text(),
            size: size5
          });
        }
        /**
         * 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;
      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, options3) {
        var scale;
        if (sizeValue.unit in ptPerUnit) {
          scale = ptPerUnit[sizeValue.unit] / options3.fontMetrics().ptPerEm / options3.sizeMultiplier;
        } else if (sizeValue.unit === "mu") {
          scale = options3.fontMetrics().cssEmPerMu;
        } else {
          var unitOptions;
          if (options3.style.isTight()) {
            unitOptions = options3.havingStyle(options3.style.text());
          } else {
            unitOptions = options3;
          }
          if (sizeValue.unit === "ex") {
            scale = unitOptions.fontMetrics().xHeight;
          } else if (sizeValue.unit === "em") {
            scale = unitOptions.fontMetrics().quad;
          } else {
            throw new ParseError("Invalid unit: '" + sizeValue.unit + "'");
          }
          if (unitOptions !== options3) {
            scale *= unitOptions.sizeMultiplier / options3.sizeMultiplier;
          }
        }
        return Math.min(sizeValue.number * scale, options3.maxSize);
      }, "calculateSize");
      makeEm = /* @__PURE__ */ __name(function makeEm2(n2) {
        return +n2.toFixed(4) + "em";
      }, "makeEm");
      createClass = /* @__PURE__ */ __name(function createClass2(classes6) {
        return classes6.filter((cls) => cls).join(" ");
      }, "createClass");
      initNode = /* @__PURE__ */ __name(function initNode2(classes6, options3, style3) {
        this.classes = classes6 || [];
        this.attributes = {};
        this.height = 0;
        this.depth = 0;
        this.maxFontSize = 0;
        this.style = style3 || {};
        if (options3) {
          if (options3.style.isTight()) {
            this.classes.push("mtight");
          }
          var color2 = options3.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 style3 in this.style) {
          if (this.style.hasOwnProperty(style3)) {
            node2.style[style3] = this.style[style3];
          }
        }
        for (var attr in this.attributes) {
          if (this.attributes.hasOwnProperty(attr)) {
            node2.setAttribute(attr, this.attributes[attr]);
          }
        }
        for (var i2 = 0; i2 < this.children.length; i2++) {
          node2.appendChild(this.children[i2].toNode());
        }
        return node2;
      }, "toNode");
      toMarkup = /* @__PURE__ */ __name(function toMarkup2(tagName) {
        var markup = "<" + tagName;
        if (this.classes.length) {
          markup += ' class="' + utils.escape(createClass(this.classes)) + '"';
        }
        var styles3 = "";
        for (var style3 in this.style) {
          if (this.style.hasOwnProperty(style3)) {
            styles3 += utils.hyphenate(style3) + ":" + this.style[style3] + ";";
          }
        }
        if (styles3) {
          markup += ' style="' + utils.escape(styles3) + '"';
        }
        for (var attr in this.attributes) {
          if (this.attributes.hasOwnProperty(attr)) {
            markup += " " + attr + '="' + utils.escape(this.attributes[attr]) + '"';
          }
        }
        markup += ">";
        for (var i2 = 0; i2 < this.children.length; i2++) {
          markup += this.children[i2].toMarkup();
        }
        markup += "";
        return markup;
      }, "toMarkup");
      Span = class {
        static {
          __name(this, "Span");
        }
        constructor(classes6, children2, options3, style3) {
          this.children = void 0;
          this.attributes = void 0;
          this.classes = void 0;
          this.height = void 0;
          this.depth = void 0;
          this.width = void 0;
          this.maxFontSize = void 0;
          this.style = void 0;
          initNode.call(this, classes6, options3, 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 utils.contains(this.classes, className);
        }
        toNode() {
          return toNode.call(this, "span");
        }
        toMarkup() {
          return toMarkup.call(this, "span");
        }
      };
      Anchor = class {
        static {
          __name(this, "Anchor");
        }
        constructor(href, classes6, children2, options3) {
          this.children = void 0;
          this.attributes = void 0;
          this.classes = void 0;
          this.height = void 0;
          this.depth = void 0;
          this.maxFontSize = void 0;
          this.style = void 0;
          initNode.call(this, classes6, options3);
          this.children = children2 || [];
          this.setAttribute("href", href);
        }
        setAttribute(attribute, value2) {
          this.attributes[attribute] = value2;
        }
        hasClass(className) {
          return utils.contains(this.classes, className);
        }
        toNode() {
          return toNode.call(this, "a");
        }
        toMarkup() {
          return toMarkup.call(this, "a");
        }
      };
      Img = class {
        static {
          __name(this, "Img");
        }
        constructor(src, alt, style3) {
          this.src = void 0;
          this.alt = void 0;
          this.classes = void 0;
          this.height = void 0;
          this.depth = void 0;
          this.maxFontSize = void 0;
          this.style = void 0;
          this.alt = alt;
          this.src = src;
          this.classes = ["mord"];
          this.style = style3;
        }
        hasClass(className) {
          return utils.contains(this.classes, className);
        }
        toNode() {
          var node2 = document.createElement("img");
          node2.src = this.src;
          node2.alt = this.alt;
          node2.className = "mord";
          for (var style3 in this.style) {
            if (this.style.hasOwnProperty(style3)) {
              node2.style[style3] = this.style[style3];
            }
          }
          return node2;
        }
        toMarkup() {
          var markup = '' + utils.escape(this.alt) + ' 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 style3 in this.style) {
            if (this.style.hasOwnProperty(style3)) {
              span = span || document.createElement("span");
              span.style[style3] = this.style[style3];
            }
          }
          if (span) {
            span.appendChild(node2);
            return span;
          } else {
            return node2;
          }
        }
        /**
         * Creates markup for a symbol node.
         */
        toMarkup() {
          var needsSpan = false;
          var markup = " 0) {
            styles3 += "margin-right:" + this.italic + "em;";
          }
          for (var style3 in this.style) {
            if (this.style.hasOwnProperty(style3)) {
              styles3 += utils.hyphenate(style3) + ":" + this.style[style3] + ";";
            }
          }
          if (styles3) {
            needsSpan = true;
            markup += ' style="' + utils.escape(styles3) + '"';
          }
          var escaped = utils.escape(this.text);
          if (needsSpan) {
            markup += ">";
            markup += escaped;
            markup += "";
            return markup;
          } else {
            return escaped;
          }
        }
      };
      SvgNode = class {
        static {
          __name(this, "SvgNode");
        }
        constructor(children2, attributes) {
          this.children = void 0;
          this.attributes = void 0;
          this.children = children2 || [];
          this.attributes = attributes || {};
        }
        toNode() {
          var svgNS = "http://www.w3.org/2000/svg";
          var node2 = document.createElementNS(svgNS, "svg");
          for (var attr in this.attributes) {
            if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {
              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 = '';
          } else {
            return '';
          }
        }
      };
      LineNode = class {
        static {
          __name(this, "LineNode");
        }
        constructor(attributes) {
          this.attributes = void 0;
          this.attributes = attributes || {};
        }
        toNode() {
          var svgNS = "http://www.w3.org/2000/svg";
          var node2 = document.createElementNS(svgNS, "line");
          for (var attr in this.attributes) {
            if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {
              node2.setAttribute(attr, this.attributes[attr]);
            }
          }
          return node2;
        }
        toMarkup() {
          var markup = "", "\\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(text, main, spacing, "\xA0", "\\ ");
      defineSymbol(text, main, spacing, "\xA0", " ");
      defineSymbol(text, main, spacing, "\xA0", "\\space");
      defineSymbol(text, 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(text, main, textord, "{", "\\{");
      defineSymbol(text, main, textord, "{", "\\textbraceleft");
      defineSymbol(math, main, close, "}", "\\}");
      defineSymbol(text, main, textord, "}", "\\}");
      defineSymbol(text, main, textord, "}", "\\textbraceright");
      defineSymbol(math, main, open, "{", "\\lbrace");
      defineSymbol(math, main, close, "}", "\\rbrace");
      defineSymbol(math, main, open, "[", "\\lbrack", true);
      defineSymbol(text, main, textord, "[", "\\lbrack", true);
      defineSymbol(math, main, close, "]", "\\rbrack", true);
      defineSymbol(text, main, textord, "]", "\\rbrack", true);
      defineSymbol(math, main, open, "(", "\\lparen", true);
      defineSymbol(math, main, close, ")", "\\rparen", true);
      defineSymbol(text, main, textord, "<", "\\textless", true);
      defineSymbol(text, 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(text, main, textord, "|", "\\textbar", true);
      defineSymbol(math, main, textord, "\u2225", "\\|");
      defineSymbol(math, main, textord, "\u2225", "\\Vert");
      defineSymbol(text, main, textord, "\u2225", "\\textbardbl");
      defineSymbol(text, main, textord, "~", "\\textasciitilde");
      defineSymbol(text, main, textord, "\\", "\\textbackslash");
      defineSymbol(text, 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(text, main, inner, "\u2026", "\\textellipsis");
      defineSymbol(math, main, inner, "\u2026", "\\mathellipsis");
      defineSymbol(text, 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(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(text, main, textord, "\u0131", "\\i", true);
      defineSymbol(text, main, textord, "\u0237", "\\j", true);
      defineSymbol(text, main, textord, "\xDF", "\\ss", true);
      defineSymbol(text, main, textord, "\xE6", "\\ae", true);
      defineSymbol(text, main, textord, "\u0153", "\\oe", true);
      defineSymbol(text, main, textord, "\xF8", "\\o", true);
      defineSymbol(text, main, textord, "\xC6", "\\AE", true);
      defineSymbol(text, main, textord, "\u0152", "\\OE", true);
      defineSymbol(text, main, textord, "\xD8", "\\O", true);
      defineSymbol(text, main, accent, "\u02CA", "\\'");
      defineSymbol(text, main, accent, "\u02CB", "\\`");
      defineSymbol(text, main, accent, "\u02C6", "\\^");
      defineSymbol(text, main, accent, "\u02DC", "\\~");
      defineSymbol(text, main, accent, "\u02C9", "\\=");
      defineSymbol(text, main, accent, "\u02D8", "\\u");
      defineSymbol(text, main, accent, "\u02D9", "\\.");
      defineSymbol(text, main, accent, "\xB8", "\\c");
      defineSymbol(text, main, accent, "\u02DA", "\\r");
      defineSymbol(text, main, accent, "\u02C7", "\\v");
      defineSymbol(text, main, accent, "\xA8", '\\"');
      defineSymbol(text, main, accent, "\u02DD", "\\H");
      defineSymbol(text, main, accent, "\u25EF", "\\textcircled");
      ligatures = {
        "--": true,
        "---": true,
        "``": true,
        "''": true
      };
      defineSymbol(text, main, textord, "\u2013", "--", true);
      defineSymbol(text, main, textord, "\u2013", "\\textendash");
      defineSymbol(text, main, textord, "\u2014", "---", true);
      defineSymbol(text, main, textord, "\u2014", "\\textemdash");
      defineSymbol(text, main, textord, "\u2018", "`", true);
      defineSymbol(text, main, textord, "\u2018", "\\textquoteleft");
      defineSymbol(text, main, textord, "\u2019", "'", true);
      defineSymbol(text, main, textord, "\u2019", "\\textquoteright");
      defineSymbol(text, main, textord, "\u201C", "``", true);
      defineSymbol(text, main, textord, "\u201C", "\\textquotedblleft");
      defineSymbol(text, main, textord, "\u201D", "''", true);
      defineSymbol(text, main, textord, "\u201D", "\\textquotedblright");
      defineSymbol(math, main, textord, "\xB0", "\\degree", true);
      defineSymbol(text, main, textord, "\xB0", "\\degree");
      defineSymbol(text, main, textord, "\xB0", "\\textdegree", true);
      defineSymbol(math, main, textord, "\xA3", "\\pounds");
      defineSymbol(math, main, textord, "\xA3", "\\mathsterling", true);
      defineSymbol(text, main, textord, "\xA3", "\\pounds");
      defineSymbol(text, main, textord, "\xA3", "\\textsterling", true);
      defineSymbol(math, ams, textord, "\u2720", "\\maltese");
      defineSymbol(text, 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(text, main, textord, _ch, _ch);
      }
      letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
      for (_i2 = 0; _i2 < letters.length; _i2++) {
        _ch2 = letters.charAt(_i2);
        defineSymbol(math, main, mathord, _ch2, _ch2);
        defineSymbol(text, main, textord, _ch2, _ch2);
      }
      defineSymbol(math, ams, textord, "C", "\u2102");
      defineSymbol(text, ams, textord, "C", "\u2102");
      defineSymbol(math, ams, textord, "H", "\u210D");
      defineSymbol(text, ams, textord, "H", "\u210D");
      defineSymbol(math, ams, textord, "N", "\u2115");
      defineSymbol(text, ams, textord, "N", "\u2115");
      defineSymbol(math, ams, textord, "P", "\u2119");
      defineSymbol(text, ams, textord, "P", "\u2119");
      defineSymbol(math, ams, textord, "Q", "\u211A");
      defineSymbol(text, ams, textord, "Q", "\u211A");
      defineSymbol(math, ams, textord, "R", "\u211D");
      defineSymbol(text, ams, textord, "R", "\u211D");
      defineSymbol(math, ams, textord, "Z", "\u2124");
      defineSymbol(text, ams, textord, "Z", "\u2124");
      defineSymbol(math, main, mathord, "h", "\u210E");
      defineSymbol(text, 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(text, main, textord, _ch3, wideChar);
        wideChar = String.fromCharCode(55349, 56372 + _i3);
        defineSymbol(math, main, mathord, _ch3, wideChar);
        defineSymbol(text, main, textord, _ch3, wideChar);
        wideChar = String.fromCharCode(55349, 56424 + _i3);
        defineSymbol(math, main, mathord, _ch3, wideChar);
        defineSymbol(text, main, textord, _ch3, wideChar);
        wideChar = String.fromCharCode(55349, 56580 + _i3);
        defineSymbol(math, main, mathord, _ch3, wideChar);
        defineSymbol(text, main, textord, _ch3, wideChar);
        wideChar = String.fromCharCode(55349, 56684 + _i3);
        defineSymbol(math, main, mathord, _ch3, wideChar);
        defineSymbol(text, main, textord, _ch3, wideChar);
        wideChar = String.fromCharCode(55349, 56736 + _i3);
        defineSymbol(math, main, mathord, _ch3, wideChar);
        defineSymbol(text, main, textord, _ch3, wideChar);
        wideChar = String.fromCharCode(55349, 56788 + _i3);
        defineSymbol(math, main, mathord, _ch3, wideChar);
        defineSymbol(text, main, textord, _ch3, wideChar);
        wideChar = String.fromCharCode(55349, 56840 + _i3);
        defineSymbol(math, main, mathord, _ch3, wideChar);
        defineSymbol(text, main, textord, _ch3, wideChar);
        wideChar = String.fromCharCode(55349, 56944 + _i3);
        defineSymbol(math, main, mathord, _ch3, wideChar);
        defineSymbol(text, main, textord, _ch3, wideChar);
        if (_i3 < 26) {
          wideChar = String.fromCharCode(55349, 56632 + _i3);
          defineSymbol(math, main, mathord, _ch3, wideChar);
          defineSymbol(text, main, textord, _ch3, wideChar);
          wideChar = String.fromCharCode(55349, 56476 + _i3);
          defineSymbol(math, main, mathord, _ch3, wideChar);
          defineSymbol(text, main, textord, _ch3, wideChar);
        }
      }
      wideChar = String.fromCharCode(55349, 56668);
      defineSymbol(math, main, mathord, "k", wideChar);
      defineSymbol(text, 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(text, main, textord, _ch4, wideChar);
        wideChar = String.fromCharCode(55349, 57314 + _i4);
        defineSymbol(math, main, mathord, _ch4, wideChar);
        defineSymbol(text, main, textord, _ch4, wideChar);
        wideChar = String.fromCharCode(55349, 57324 + _i4);
        defineSymbol(math, main, mathord, _ch4, wideChar);
        defineSymbol(text, main, textord, _ch4, wideChar);
        wideChar = String.fromCharCode(55349, 57334 + _i4);
        defineSymbol(math, main, mathord, _ch4, wideChar);
        defineSymbol(text, 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(text, 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(function wideCharacterFont2(wideChar2, mode) {
        var H2 = wideChar2.charCodeAt(0);
        var L2 = wideChar2.charCodeAt(1);
        var codePoint = (H2 - 55296) * 1024 + (L2 - 56320) + 65536;
        var j2 = mode === "math" ? 0 : 1;
        if (119808 <= codePoint && codePoint < 120484) {
          var i2 = Math.floor((codePoint - 119808) / 26);
          return [wideLatinLetterData[i2][2], wideLatinLetterData[i2][j2]];
        } else if (120782 <= codePoint && codePoint <= 120831) {
          var _i = Math.floor((codePoint - 120782) / 10);
          return [wideNumeralData[_i][2], wideNumeralData[_i][j2]];
        } else if (codePoint === 120485 || codePoint === 120486) {
          return [wideLatinLetterData[0][2], wideLatinLetterData[0][j2]];
        } 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] && symbols[mode][value2].replace) {
          value2 = symbols[mode][value2].replace;
        }
        return {
          value: value2,
          metrics: getCharacterMetrics(value2, fontName, mode)
        };
      }, "lookupSymbol");
      makeSymbol = /* @__PURE__ */ __name(function makeSymbol2(value2, fontName, mode, options3, classes6) {
        var lookup2 = lookupSymbol(value2, fontName, mode);
        var metrics = lookup2.metrics;
        value2 = lookup2.value;
        var symbolNode;
        if (metrics) {
          var italic = metrics.italic;
          if (mode === "text" || options3 && options3.font === "mathit") {
            italic = 0;
          }
          symbolNode = new SymbolNode(value2, metrics.height, metrics.depth, italic, metrics.skew, metrics.width, classes6);
        } 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, classes6);
        }
        if (options3) {
          symbolNode.maxFontSize = options3.sizeMultiplier;
          if (options3.style.isTight()) {
            symbolNode.classes.push("mtight");
          }
          var color2 = options3.getColor();
          if (color2) {
            symbolNode.style.color = color2;
          }
        }
        return symbolNode;
      }, "makeSymbol");
      mathsym = /* @__PURE__ */ __name(function mathsym2(value2, mode, options3, classes6) {
        if (classes6 === void 0) {
          classes6 = [];
        }
        if (options3.font === "boldsymbol" && lookupSymbol(value2, "Main-Bold", mode).metrics) {
          return makeSymbol(value2, "Main-Bold", mode, options3, classes6.concat(["mathbf"]));
        } else if (value2 === "\\" || symbols[mode][value2].font === "main") {
          return makeSymbol(value2, "Main-Regular", mode, options3, classes6);
        } else {
          return makeSymbol(value2, "AMS-Regular", mode, options3, classes6.concat(["amsrm"]));
        }
      }, "mathsym");
      boldsymbol = /* @__PURE__ */ __name(function boldsymbol2(value2, mode, options3, classes6, 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, options3, type3) {
        var mode = group2.mode;
        var text3 = group2.text;
        var classes6 = ["mord"];
        var isFont = mode === "math" || mode === "text" && options3.font;
        var fontOrFamily = isFont ? options3.font : options3.fontFamily;
        var wideFontName = "";
        var wideFontClass = "";
        if (text3.charCodeAt(0) === 55349) {
          [wideFontName, wideFontClass] = wideCharacterFont(text3, mode);
        }
        if (wideFontName.length > 0) {
          return makeSymbol(text3, wideFontName, mode, options3, classes6.concat(wideFontClass));
        } else if (fontOrFamily) {
          var fontName;
          var fontClasses;
          if (fontOrFamily === "boldsymbol") {
            var fontData = boldsymbol(text3, mode, options3, classes6, type3);
            fontName = fontData.fontName;
            fontClasses = [fontData.fontClass];
          } else if (isFont) {
            fontName = fontMap[fontOrFamily].fontName;
            fontClasses = [fontOrFamily];
          } else {
            fontName = retrieveTextFontName(fontOrFamily, options3.fontWeight, options3.fontShape);
            fontClasses = [fontOrFamily, options3.fontWeight, options3.fontShape];
          }
          if (lookupSymbol(text3, fontName, mode).metrics) {
            return makeSymbol(text3, fontName, mode, options3, classes6.concat(fontClasses));
          } else if (ligatures.hasOwnProperty(text3) && fontName.slice(0, 10) === "Typewriter") {
            var parts = [];
            for (var i2 = 0; i2 < text3.length; i2++) {
              parts.push(makeSymbol(text3[i2], fontName, mode, options3, classes6.concat(fontClasses)));
            }
            return makeFragment(parts);
          }
        }
        if (type3 === "mathord") {
          return makeSymbol(text3, "Math-Italic", mode, options3, classes6.concat(["mathnormal"]));
        } else if (type3 === "textord") {
          var font = symbols[mode][text3] && symbols[mode][text3].font;
          if (font === "ams") {
            var _fontName = retrieveTextFontName("amsrm", options3.fontWeight, options3.fontShape);
            return makeSymbol(text3, _fontName, mode, options3, classes6.concat("amsrm", options3.fontWeight, options3.fontShape));
          } else if (font === "main" || !font) {
            var _fontName2 = retrieveTextFontName("textrm", options3.fontWeight, options3.fontShape);
            return makeSymbol(text3, _fontName2, mode, options3, classes6.concat(options3.fontWeight, options3.fontShape));
          } else {
            var _fontName3 = retrieveTextFontName(font, options3.fontWeight, options3.fontShape);
            return makeSymbol(text3, _fontName3, mode, options3, classes6.concat(_fontName3, options3.fontWeight, options3.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) {
          return false;
        }
        if (prev2.classes.length === 1) {
          var cls = prev2.classes[0];
          if (cls === "mbin" || cls === "mord") {
            return false;
          }
        }
        for (var style3 in prev2.style) {
          if (prev2.style.hasOwnProperty(style3) && prev2.style[style3] !== next3.style[style3]) {
            return false;
          }
        }
        for (var _style in next3.style) {
          if (next3.style.hasOwnProperty(_style) && prev2.style[_style] !== next3.style[_style]) {
            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$2 = /* @__PURE__ */ __name(function makeSpan(classes6, children2, options3, style3) {
        var span = new Span(classes6, children2, options3, style3);
        sizeElementFromChildren(span);
        return span;
      }, "makeSpan");
      makeSvgSpan = /* @__PURE__ */ __name((classes6, children2, options3, style3) => new Span(classes6, children2, options3, style3), "makeSvgSpan");
      makeLineSpan = /* @__PURE__ */ __name(function makeLineSpan2(className, options3, thickness) {
        var line2 = makeSpan$2([className], [], options3);
        line2.height = Math.max(thickness || options3.fontMetrics().defaultRuleThickness, options3.minRuleThickness);
        line2.style.borderBottomWidth = makeEm(line2.height);
        line2.maxFontSize = 1;
        return line2;
      }, "makeLineSpan");
      makeAnchor = /* @__PURE__ */ __name(function makeAnchor2(href, classes6, children2, options3) {
        var anchor2 = new Anchor(href, classes6, children2, options3);
        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, options3) {
        if (group2 instanceof DocumentFragment) {
          return makeSpan$2([], [group2], options3);
        }
        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 size5 = diff2 - (oldChildren[i2 - 1].elem.height + oldChildren[i2 - 1].elem.depth);
            currPos = currPos + diff2;
            children2.push({
              type: "kern",
              size: size5
            });
            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, options3) {
        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$2(["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 classes6 = _child.wrapperClasses || [];
            var style3 = _child.wrapperStyle || {};
            var childWrap = makeSpan$2(classes6, [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$2(["vlist"], realChildren);
        vlist.style.height = makeEm(maxPos2);
        var rows;
        if (minPos < 0) {
          var emptySpan = makeSpan$2([], []);
          var depthStrut = makeSpan$2(["vlist"], [emptySpan]);
          depthStrut.style.height = makeEm(-minPos);
          var topStrut = makeSpan$2(["vlist-s"], [new SymbolNode("\u200B")]);
          rows = [makeSpan$2(["vlist-r"], [vlist, topStrut]), makeSpan$2(["vlist-r"], [depthStrut])];
        } else {
          rows = [makeSpan$2(["vlist-r"], [vlist])];
        }
        var vtable = makeSpan$2(["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, options3) => {
        var rule = makeSpan$2(["mspace"], [], options3);
        var size5 = calculateSize2(measurement, options3);
        rule.style.marginRight = makeEm(size5);
        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"
        },
        // "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, options3) {
        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], options3);
        span.height = height2;
        span.style.height = makeEm(height2);
        span.style.width = makeEm(width3);
        return span;
      }, "staticSvg");
      buildCommon = {
        fontMap,
        makeSymbol,
        mathsym,
        makeSpan: makeSpan$2,
        makeSvgSpan,
        makeLineSpan,
        makeAnchor,
        makeFragment,
        wrapFragment,
        makeVList,
        makeOrd,
        makeGlue,
        staticSvg,
        svgData,
        tryCombineChars
      };
      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");
      makeSpan$1 = buildCommon.makeSpan;
      binLeftCanceller = ["leftmost", "mbin", "mopen", "mrel", "mop", "mpunct"];
      binRightCanceller = ["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, options3, 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], options3);
          if (output2 instanceof DocumentFragment) {
            var children2 = output2.children;
            groups.push(...children2);
          } else {
            groups.push(output2);
          }
        }
        buildCommon.tryCombineChars(groups);
        if (!isRealGroup) {
          return groups;
        }
        var glueOptions = options3;
        if (expression.length === 1) {
          var node2 = expression[0];
          if (node2.type === "sizing") {
            glueOptions = options3.havingSize(node2.size);
          } else if (node2.type === "styling") {
            glueOptions = options3.havingStyle(styleMap$1[node2.style]);
          }
        }
        var dummyPrev = makeSpan$1([surrounding[0] || "leftmost"], [], options3);
        var dummyNext = makeSpan$1([surrounding[1] || "rightmost"], [], options3);
        var isRoot = isRealGroup === "root";
        traverseNonSpaceNodes(groups, (node3, prev2) => {
          var prevType = prev2.classes[0];
          var type3 = node3.classes[0];
          if (prevType === "mbin" && utils.contains(binRightCanceller, type3)) {
            prev2.classes[0] = "mord";
          } else if (type3 === "mbin" && utils.contains(binLeftCanceller, prevType)) {
            node3.classes[0] = "mord";
          }
        }, {
          node: dummyPrev
        }, dummyNext, isRoot);
        traverseNonSpaceNodes(groups, (node3, prev2) => {
          var prevType = getTypeOfDomTree(prev2);
          var type3 = getTypeOfDomTree(node3);
          var space = prevType && type3 ? node3.hasClass("mtight") ? tightSpacings[prevType][type3] : spacings[prevType][type3] : null;
          if (space) {
            return buildCommon.makeGlue(space, glueOptions);
          }
        }, {
          node: dummyPrev
        }, dummyNext, isRoot);
        return groups;
      }, "buildExpression");
      traverseNonSpaceNodes = /* @__PURE__ */ __name(function traverseNonSpaceNodes2(nodes7, callback, prev2, next3, isRoot) {
        if (next3) {
          nodes7.push(next3);
        }
        var i2 = 0;
        for (; i2 < nodes7.length; i2++) {
          var node2 = nodes7[i2];
          var partialGroup = checkPartialGroup(node2);
          if (partialGroup) {
            traverseNonSpaceNodes2(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 {
                nodes7.unshift(result);
                i2++;
              }
            }
          }
          if (nonspace) {
            prev2.node = node2;
          } else if (isRoot && node2.hasClass("newline")) {
            prev2.node = makeSpan$1(["leftmost"]);
          }
          prev2.insertAfter = /* @__PURE__ */ ((index) => (n2) => {
            nodes7.splice(index + 1, 0, n2);
            i2++;
          })(i2);
        }
        if (next3) {
          nodes7.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 getOutermostNode2(node2, side) {
        var partialGroup = checkPartialGroup(node2);
        if (partialGroup) {
          var children2 = partialGroup.children;
          if (children2.length) {
            if (side === "right") {
              return getOutermostNode2(children2[children2.length - 1], "right");
            } else if (side === "left") {
              return getOutermostNode2(children2[0], "left");
            }
          }
        }
        return node2;
      }, "getOutermostNode");
      getTypeOfDomTree = /* @__PURE__ */ __name(function getTypeOfDomTree2(node2, side) {
        if (!node2) {
          return null;
        }
        if (side) {
          node2 = getOutermostNode(node2, side);
        }
        return DomEnum[node2.classes[0]] || null;
      }, "getTypeOfDomTree");
      makeNullDelimiter = /* @__PURE__ */ __name(function makeNullDelimiter2(options3, classes6) {
        var moreClasses = ["nulldelimiter"].concat(options3.baseSizingClasses());
        return makeSpan$1(classes6.concat(moreClasses));
      }, "makeNullDelimiter");
      buildGroup$1 = /* @__PURE__ */ __name(function buildGroup(group2, options3, baseOptions) {
        if (!group2) {
          return makeSpan$1();
        }
        if (_htmlGroupBuilders[group2.type]) {
          var groupNode = _htmlGroupBuilders[group2.type](group2, options3);
          if (baseOptions && options3.size !== baseOptions.size) {
            groupNode = makeSpan$1(options3.sizingClasses(baseOptions), [groupNode], options3);
            var multiplier = options3.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, classes6) {
          this.type = void 0;
          this.attributes = void 0;
          this.children = void 0;
          this.classes = void 0;
          this.type = type3;
          this.attributes = {};
          this.children = children2 || [];
          this.classes = classes6 || [];
        }
        /**
         * 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++) {
            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 += utils.escape(this.attributes[attr]);
              markup += '"';
            }
          }
          if (this.classes.length > 0) {
            markup += ' class ="' + utils.escape(createClass(this.classes)) + '"';
          }
          markup += ">";
          for (var i2 = 0; i2 < this.children.length; i2++) {
            markup += this.children[i2].toMarkup();
          }
          markup += "";
          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(text3) {
          this.text = void 0;
          this.text = text3;
        }
        /**
         * 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 utils.escape(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 = void 0;
          this.character = void 0;
          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 "" + this.character + "";
          } else {
            return '';
          }
        }
        /**
         * Converts the math node into a string, similar to innerText.
         */
        toText() {
          if (this.character) {
            return this.character;
          } else {
            return " ";
          }
        }
      };
      mathMLTree = {
        MathNode,
        TextNode,
        SpaceNode,
        newDocumentFragment
      };
      makeText = /* @__PURE__ */ __name(function makeText2(text3, mode, options3) {
        if (symbols[mode][text3] && symbols[mode][text3].replace && text3.charCodeAt(0) !== 55349 && !(ligatures.hasOwnProperty(text3) && options3 && (options3.fontFamily && options3.fontFamily.slice(4, 6) === "tt" || options3.font && options3.font.slice(4, 6) === "tt"))) {
          text3 = symbols[mode][text3].replace;
        }
        return new mathMLTree.TextNode(text3);
      }, "makeText");
      makeRow = /* @__PURE__ */ __name(function makeRow2(body) {
        if (body.length === 1) {
          return body[0];
        } else {
          return new mathMLTree.MathNode("mrow", body);
        }
      }, "makeRow");
      getVariant = /* @__PURE__ */ __name(function getVariant2(group2, options3) {
        if (options3.fontFamily === "texttt") {
          return "monospace";
        } else if (options3.fontFamily === "textsf") {
          if (options3.fontShape === "textit" && options3.fontWeight === "textbf") {
            return "sans-serif-bold-italic";
          } else if (options3.fontShape === "textit") {
            return "sans-serif-italic";
          } else if (options3.fontWeight === "textbf") {
            return "bold-sans-serif";
          } else {
            return "sans-serif";
          }
        } else if (options3.fontShape === "textit" && options3.fontWeight === "textbf") {
          return "bold-italic";
        } else if (options3.fontShape === "textit") {
          return "italic";
        } else if (options3.fontWeight === "textbf") {
          return "bold";
        }
        var font = options3.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 === "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 text3 = group2.text;
        if (utils.contains(["\\imath", "\\jmath"], text3)) {
          return null;
        }
        if (symbols[mode][text3] && symbols[mode][text3].replace) {
          text3 = symbols[mode][text3].replace;
        }
        var fontName = buildCommon.fontMap[font].fontName;
        if (getCharacterMetrics(text3, fontName, mode)) {
          return buildCommon.fontMap[font].variant;
        }
        return null;
      }, "getVariant");
      buildExpression2 = /* @__PURE__ */ __name(function buildExpression3(expression, options3, isOrdgroup) {
        if (expression.length === 1) {
          var group2 = buildGroup2(expression[0], options3);
          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], options3);
          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 (_group.type === "mi" && _group.children.length === 1 && lastGroup.type === "mn") {
              var child = _group.children[0];
              if (child instanceof TextNode && child.text === ".") {
                lastGroup.children.push(..._group.children);
                continue;
              }
            } 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, options3, isOrdgroup) {
        return makeRow(buildExpression2(expression, options3, isOrdgroup));
      }, "buildExpressionRow");
      buildGroup2 = /* @__PURE__ */ __name(function buildGroup3(group2, options3) {
        if (!group2) {
          return new mathMLTree.MathNode("mrow");
        }
        if (_mathmlGroupBuilders[group2.type]) {
          var result = _mathmlGroupBuilders[group2.type](group2, options3);
          return result;
        } else {
          throw new ParseError("Got group of unknown type: '" + group2.type + "'");
        }
      }, "buildGroup");
      __name(buildMathML, "buildMathML");
      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 classes6 = ["katex-display"];
          if (settings.leqno) {
            classes6.push("leqno");
          }
          if (settings.fleqn) {
            classes6.push("fleqn");
          }
          node2 = buildCommon.makeSpan(classes6, [node2]);
        }
        return node2;
      }, "displayWrap");
      buildTree = /* @__PURE__ */ __name(function buildTree2(tree, expression, settings) {
        var options3 = optionsFromSettings(settings);
        var katexNode;
        if (settings.output === "mathml") {
          return buildMathML(tree, expression, options3, settings.displayMode, true);
        } else if (settings.output === "html") {
          var htmlNode = buildHTML(tree, options3);
          katexNode = buildCommon.makeSpan(["katex"], [htmlNode]);
        } else {
          var mathMLNode = buildMathML(tree, expression, options3, settings.displayMode, false);
          var _htmlNode = buildHTML(tree, options3);
          katexNode = buildCommon.makeSpan(["katex"], [mathMLNode, _htmlNode]);
        }
        return displayWrap(katexNode, settings);
      }, "buildTree");
      buildHTMLTree = /* @__PURE__ */ __name(function buildHTMLTree2(tree, expression, settings) {
        var options3 = optionsFromSettings(settings);
        var htmlNode = buildHTML(tree, options3);
        var katexNode = buildCommon.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",
        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": "="
      };
      mathMLnode = /* @__PURE__ */ __name(function mathMLnode2(label) {
        var node2 = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(stretchyCodePoint[label.replace(/^\\/, "")])]);
        node2.setAttribute("stretchy", "true");
        return node2;
      }, "mathMLnode");
      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],
        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]
      };
      groupLength = /* @__PURE__ */ __name(function groupLength2(arg) {
        if (arg.type === "ordgroup") {
          return arg.body.length;
        } else {
          return 1;
        }
      }, "groupLength");
      svgSpan = /* @__PURE__ */ __name(function svgSpan2(group2, options3) {
        function buildSvgSpan_() {
          var viewBoxWidth = 4e5;
          var label = group2.label.slice(1);
          if (utils.contains(["widehat", "widecheck", "widetilde", "utilde"], label)) {
            var grp = group2;
            var numChars = groupLength(grp.base);
            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: buildCommon.makeSvgSpan([], [svgNode2], options3),
              minWidth: 0,
              height: _height
            };
          } else {
            var spans = [];
            var data5 = katexImagesData[label];
            var [paths, _minWidth, _viewBoxHeight] = data5;
            var _height2 = _viewBoxHeight / 1e3;
            var numSvgChildren = paths.length;
            var widthClasses;
            var aligns;
            if (numSvgChildren === 1) {
              var align1 = data5[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 = buildCommon.makeSvgSpan([widthClasses[i2]], [_svgNode], options3);
              if (numSvgChildren === 1) {
                return {
                  span: _span,
                  minWidth: _minWidth,
                  height: _height2
                };
              } else {
                _span.style.height = makeEm(_height2);
                spans.push(_span);
              }
            }
            return {
              span: buildCommon.makeSpan(["stretchy"], spans, options3),
              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;
      }, "svgSpan");
      encloseSpan = /* @__PURE__ */ __name(function encloseSpan2(inner2, label, topPad, bottomPad, options3) {
        var img;
        var totalHeight = inner2.height + inner2.depth + topPad + bottomPad;
        if (/fbox|color|angl/.test(label)) {
          img = buildCommon.makeSpan(["stretchy", label], [], options3);
          if (label === "fbox") {
            var color2 = options3.color && options3.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 = buildCommon.makeSvgSpan([], [svgNode2], options3);
        }
        img.height = totalHeight;
        img.style.height = makeEm(totalHeight);
        return img;
      }, "encloseSpan");
      stretchy = {
        encloseSpan,
        mathMLnode,
        svgSpan
      };
      __name(assertNodeType, "assertNodeType");
      __name(assertSymbolNodeType, "assertSymbolNodeType");
      __name(checkSymbolNodeType, "checkSymbolNodeType");
      htmlBuilder$a = /* @__PURE__ */ __name((grp, options3) => {
        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, options3));
          grp.base = group2;
        } else {
          group2 = assertNodeType(grp, "accent");
          base = group2.base;
        }
        var body = buildGroup$1(base, options3.havingCrampedStyle());
        var mustShift = group2.isShifty && utils.isCharacterBox(base);
        var skew = 0;
        if (mustShift) {
          var baseChar = utils.getBaseElem(base);
          var baseGroup = buildGroup$1(baseChar, options3.havingCrampedStyle());
          skew = assertSymbolDomNode(baseGroup).skew;
        }
        var accentBelow = group2.label === "\\c";
        var clearance = accentBelow ? body.height + body.depth : Math.min(body.height, options3.fontMetrics().xHeight);
        var accentBody;
        if (!group2.isStretchy) {
          var accent2;
          var width3;
          if (group2.label === "\\vec") {
            accent2 = buildCommon.staticSvg("vec", options3);
            width3 = buildCommon.svgData.vec[1];
          } else {
            accent2 = buildCommon.makeOrd({
              mode: group2.mode,
              text: group2.label
            }, options3, "textord");
            accent2 = assertSymbolDomNode(accent2);
            accent2.italic = 0;
            width3 = accent2.width;
            if (accentBelow) {
              clearance += accent2.depth;
            }
          }
          accentBody = buildCommon.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 = buildCommon.makeVList({
            positionType: "firstBaseline",
            children: [{
              type: "elem",
              elem: body
            }, {
              type: "kern",
              size: -clearance
            }, {
              type: "elem",
              elem: accentBody
            }]
          }, options3);
        } else {
          accentBody = stretchy.svgSpan(group2, options3);
          accentBody = buildCommon.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
            }]
          }, options3);
        }
        var accentWrap = buildCommon.makeSpan(["mord", "accent"], [accentBody], options3);
        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, options3) => {
        var accentNode = group2.isStretchy ? stretchy.mathMLnode(group2.label) : new mathMLTree.MathNode("mo", [makeText(group2.label, group2.mode)]);
        var node2 = new mathMLTree.MathNode("mover", [buildGroup2(group2.base, options3), 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: parser23,
            funcName
          } = _ref;
          var base = args[0];
          return {
            type: "accentUnder",
            mode: parser23.mode,
            label: funcName,
            base
          };
        }, "handler"),
        htmlBuilder: /* @__PURE__ */ __name((group2, options3) => {
          var innerGroup = buildGroup$1(group2.base, options3);
          var accentBody = stretchy.svgSpan(group2, options3);
          var kern = group2.label === "\\utilde" ? 0.12 : 0;
          var vlist = buildCommon.makeVList({
            positionType: "top",
            positionData: innerGroup.height,
            children: [{
              type: "elem",
              elem: accentBody,
              wrapperClasses: ["svg-align"]
            }, {
              type: "kern",
              size: kern
            }, {
              type: "elem",
              elem: innerGroup
            }]
          }, options3);
          return buildCommon.makeSpan(["mord", "accentunder"], [vlist], options3);
        }, "htmlBuilder"),
        mathmlBuilder: /* @__PURE__ */ __name((group2, options3) => {
          var accentNode = stretchy.mathMLnode(group2.label);
          var node2 = new mathMLTree.MathNode("munder", [buildGroup2(group2.base, options3), accentNode]);
          node2.setAttribute("accentunder", "true");
          return node2;
        }, "mathmlBuilder")
      });
      paddedNode = /* @__PURE__ */ __name((group2) => {
        var node2 = new mathMLTree.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: parser23,
            funcName
          } = _ref;
          return {
            type: "xArrow",
            mode: parser23.mode,
            label: funcName,
            body: args[0],
            below: optArgs[0]
          };
        },
        // Flow is unable to correctly infer the type of `group`, even though it's
        // unambiguously determined from the passed-in `type` above.
        htmlBuilder(group2, options3) {
          var style3 = options3.style;
          var newOptions = options3.havingStyle(style3.sup());
          var upperGroup = buildCommon.wrapFragment(buildGroup$1(group2.body, newOptions, options3), options3);
          var arrowPrefix = group2.label.slice(0, 2) === "\\x" ? "x" : "cd";
          upperGroup.classes.push(arrowPrefix + "-arrow-pad");
          var lowerGroup;
          if (group2.below) {
            newOptions = options3.havingStyle(style3.sub());
            lowerGroup = buildCommon.wrapFragment(buildGroup$1(group2.below, newOptions, options3), options3);
            lowerGroup.classes.push(arrowPrefix + "-arrow-pad");
          }
          var arrowBody = stretchy.svgSpan(group2, options3);
          var arrowShift = -options3.fontMetrics().axisHeight + 0.5 * arrowBody.height;
          var upperShift = -options3.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 = -options3.fontMetrics().axisHeight + lowerGroup.height + 0.5 * arrowBody.height + 0.111;
            vlist = buildCommon.makeVList({
              positionType: "individualShift",
              children: [{
                type: "elem",
                elem: upperGroup,
                shift: upperShift
              }, {
                type: "elem",
                elem: arrowBody,
                shift: arrowShift
              }, {
                type: "elem",
                elem: lowerGroup,
                shift: lowerShift
              }]
            }, options3);
          } else {
            vlist = buildCommon.makeVList({
              positionType: "individualShift",
              children: [{
                type: "elem",
                elem: upperGroup,
                shift: upperShift
              }, {
                type: "elem",
                elem: arrowBody,
                shift: arrowShift
              }]
            }, options3);
          }
          vlist.children[0].children[0].children[1].classes.push("svg-align");
          return buildCommon.makeSpan(["mrel", "x-arrow"], [vlist], options3);
        },
        mathmlBuilder(group2, options3) {
          var arrowNode = stretchy.mathMLnode(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, options3));
            if (group2.below) {
              var lowerNode = paddedNode(buildGroup2(group2.below, options3));
              node2 = new mathMLTree.MathNode("munderover", [arrowNode, lowerNode, upperNode]);
            } else {
              node2 = new mathMLTree.MathNode("mover", [arrowNode, upperNode]);
            }
          } else if (group2.below) {
            var _lowerNode = paddedNode(buildGroup2(group2.below, options3));
            node2 = new mathMLTree.MathNode("munder", [arrowNode, _lowerNode]);
          } else {
            node2 = paddedNode();
            node2 = new mathMLTree.MathNode("mover", [arrowNode, node2]);
          }
          return node2;
        }
      });
      makeSpan2 = buildCommon.makeSpan;
      __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: parser23,
            funcName
          } = _ref;
          var body = args[0];
          return {
            type: "mclass",
            mode: parser23.mode,
            mclass: "m" + funcName.slice(5),
            // TODO(kevinb): don't prefix with 'm'
            body: ordargument(body),
            isCharacterBox: utils.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: parser23
          } = _ref2;
          return {
            type: "mclass",
            mode: parser23.mode,
            mclass: binrelClass(args[0]),
            body: ordargument(args[1]),
            isCharacterBox: utils.isCharacterBox(args[1])
          };
        }
      });
      defineFunction({
        type: "mclass",
        names: ["\\stackrel", "\\overset", "\\underset"],
        props: {
          numArgs: 2
        },
        handler(_ref3, args) {
          var {
            parser: parser23,
            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: parser23.mode,
            mclass,
            body: [supsub],
            isCharacterBox: utils.isCharacterBox(supsub)
          };
        },
        htmlBuilder: htmlBuilder$9,
        mathmlBuilder: mathmlBuilder$8
      });
      defineFunction({
        type: "pmb",
        names: ["\\pmb"],
        props: {
          numArgs: 1,
          allowedInText: true
        },
        handler(_ref, args) {
          var {
            parser: parser23
          } = _ref;
          return {
            type: "pmb",
            mode: parser23.mode,
            mclass: binrelClass(args[0]),
            body: ordargument(args[0])
          };
        },
        htmlBuilder(group2, options3) {
          var elements4 = buildExpression$1(group2.body, options3, true);
          var node2 = buildCommon.makeSpan([group2.mclass], elements4, options3);
          node2.style.textShadow = "0.02em 0.01em 0.04px";
          return node2;
        },
        mathmlBuilder(group2, style3) {
          var inner2 = buildExpression2(group2.body, style3);
          var node2 = new mathMLTree.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: parser23,
            funcName
          } = _ref;
          return {
            type: "cdlabel",
            mode: parser23.mode,
            side: funcName.slice(4),
            label: args[0]
          };
        },
        htmlBuilder(group2, options3) {
          var newOptions = options3.havingStyle(options3.style.sup());
          var label = buildCommon.wrapFragment(buildGroup$1(group2.label, newOptions, options3), options3);
          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, options3) {
          var label = new mathMLTree.MathNode("mrow", [buildGroup2(group2.label, options3)]);
          label = new mathMLTree.MathNode("mpadded", [label]);
          label.setAttribute("width", "0");
          if (group2.side === "left") {
            label.setAttribute("lspace", "-1width");
          }
          label.setAttribute("voffset", "0.7em");
          label = new mathMLTree.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: parser23
          } = _ref2;
          return {
            type: "cdlabelparent",
            mode: parser23.mode,
            fragment: args[0]
          };
        },
        htmlBuilder(group2, options3) {
          var parent4 = buildCommon.wrapFragment(buildGroup$1(group2.fragment, options3), options3);
          parent4.classes.push("cd-vert-arrow");
          return parent4;
        },
        mathmlBuilder(group2, options3) {
          return new mathMLTree.MathNode("mrow", [buildGroup2(group2.fragment, options3)]);
        }
      });
      defineFunction({
        type: "textord",
        names: ["\\@char"],
        props: {
          numArgs: 1,
          allowedInText: true
        },
        handler(_ref, args) {
          var {
            parser: parser23
          } = _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 text3;
          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) {
            text3 = String.fromCharCode(code);
          } else {
            code -= 65536;
            text3 = String.fromCharCode((code >> 10) + 55296, (code & 1023) + 56320);
          }
          return {
            type: "textord",
            mode: parser23.mode,
            text: text3
          };
        }
      });
      htmlBuilder$8 = /* @__PURE__ */ __name((group2, options3) => {
        var elements4 = buildExpression$1(group2.body, options3.withColor(group2.color), false);
        return buildCommon.makeFragment(elements4);
      }, "htmlBuilder$8");
      mathmlBuilder$7 = /* @__PURE__ */ __name((group2, options3) => {
        var inner2 = buildExpression2(group2.body, options3.withColor(group2.color));
        var node2 = new mathMLTree.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: parser23
          } = _ref;
          var color2 = assertNodeType(args[0], "color-token").color;
          var body = args[1];
          return {
            type: "color",
            mode: parser23.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: parser23,
            breakOnTokenText
          } = _ref2;
          var color2 = assertNodeType(args[0], "color-token").color;
          parser23.gullet.macros.set("\\current@color", color2);
          var body = parser23.parseExpression(true, breakOnTokenText);
          return {
            type: "color",
            mode: parser23.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: parser23
          } = _ref;
          var size5 = parser23.gullet.future().text === "[" ? parser23.parseSizeGroup(true) : null;
          var newLine = !parser23.settings.displayMode || !parser23.settings.useStrictBehavior("newLineInDisplayMode", "In LaTeX, \\\\ or \\newline does nothing in display mode");
          return {
            type: "cr",
            mode: parser23.mode,
            newLine,
            size: size5 && assertNodeType(size5, "size").value
          };
        },
        // The following builders are called only at the top level,
        // not within tabular/array environments.
        htmlBuilder(group2, options3) {
          var span = buildCommon.makeSpan(["mspace"], [], options3);
          if (group2.newLine) {
            span.classes.push("newline");
            if (group2.size) {
              span.style.marginTop = makeEm(calculateSize2(group2.size, options3));
            }
          }
          return span;
        },
        mathmlBuilder(group2, options3) {
          var node2 = new mathMLTree.MathNode("mspace");
          if (group2.newLine) {
            node2.setAttribute("linebreak", "newline");
            if (group2.size) {
              node2.setAttribute("height", makeEm(calculateSize2(group2.size, options3)));
            }
          }
          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((parser23) => {
        var tok = parser23.gullet.popToken();
        if (tok.text === "=") {
          tok = parser23.gullet.popToken();
          if (tok.text === " ") {
            tok = parser23.gullet.popToken();
          }
        }
        return tok;
      }, "getRHS");
      letCommand = /* @__PURE__ */ __name((parser23, name, tok, global2) => {
        var macro = parser23.gullet.macros.get(tok.text);
        if (macro == null) {
          tok.noexpand = true;
          macro = {
            tokens: [tok],
            numArgs: 0,
            // reproduce the same behavior in expansion
            unexpandable: !parser23.gullet.isExpandable(tok.text)
          };
        }
        parser23.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: parser23,
            funcName
          } = _ref;
          parser23.consumeSpaces();
          var token2 = parser23.fetch();
          if (globalMap[token2.text]) {
            if (funcName === "\\global" || funcName === "\\\\globallong") {
              token2.text = globalMap[token2.text];
            }
            return assertNodeType(parser23.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: parser23,
            funcName
          } = _ref2;
          var tok = parser23.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 (parser23.gullet.future().text !== "{") {
            tok = parser23.gullet.popToken();
            if (tok.text === "#") {
              if (parser23.gullet.future().text === "{") {
                insert = parser23.gullet.future();
                delimiters2[numArgs].push("{");
                break;
              }
              tok = parser23.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
          } = parser23.gullet.consumeArg();
          if (insert) {
            tokens2.unshift(insert);
          }
          if (funcName === "\\edef" || funcName === "\\xdef") {
            tokens2 = parser23.gullet.expandTokens(tokens2);
            tokens2.reverse();
          }
          parser23.gullet.macros.set(name, {
            tokens: tokens2,
            numArgs,
            delimiters: delimiters2
          }, funcName === globalMap[funcName]);
          return {
            type: "internal",
            mode: parser23.mode
          };
        }
      });
      defineFunction({
        type: "internal",
        names: [
          "\\let",
          "\\\\globallet"
          // can’t be entered directly
        ],
        props: {
          numArgs: 0,
          allowedInText: true,
          primitive: true
        },
        handler(_ref3) {
          var {
            parser: parser23,
            funcName
          } = _ref3;
          var name = checkControlSequence(parser23.gullet.popToken());
          parser23.gullet.consumeSpaces();
          var tok = getRHS(parser23);
          letCommand(parser23, name, tok, funcName === "\\\\globallet");
          return {
            type: "internal",
            mode: parser23.mode
          };
        }
      });
      defineFunction({
        type: "internal",
        names: [
          "\\futurelet",
          "\\\\globalfuture"
          // can’t be entered directly
        ],
        props: {
          numArgs: 0,
          allowedInText: true,
          primitive: true
        },
        handler(_ref4) {
          var {
            parser: parser23,
            funcName
          } = _ref4;
          var name = checkControlSequence(parser23.gullet.popToken());
          var middle = parser23.gullet.popToken();
          var tok = parser23.gullet.popToken();
          letCommand(parser23, name, tok, funcName === "\\\\globalfuture");
          parser23.gullet.pushToken(tok);
          parser23.gullet.pushToken(middle);
          return {
            type: "internal",
            mode: parser23.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, options3, classes6) {
        var newOptions = options3.havingBaseStyle(toStyle);
        var span = buildCommon.makeSpan(classes6.concat(newOptions.sizingClasses(options3)), [delim], options3);
        var delimSizeMultiplier = newOptions.sizeMultiplier / options3.sizeMultiplier;
        span.height *= delimSizeMultiplier;
        span.depth *= delimSizeMultiplier;
        span.maxFontSize = newOptions.sizeMultiplier;
        return span;
      }, "styleWrap");
      centerSpan = /* @__PURE__ */ __name(function centerSpan2(span, options3, style3) {
        var newOptions = options3.havingBaseStyle(style3);
        var shift2 = (1 - options3.sizeMultiplier / newOptions.sizeMultiplier) * options3.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, options3, mode, classes6) {
        var text3 = buildCommon.makeSymbol(delim, "Main-Regular", mode, options3);
        var span = styleWrap(text3, style3, options3, classes6);
        if (center4) {
          centerSpan(span, options3, style3);
        }
        return span;
      }, "makeSmallDelim");
      mathrmSize = /* @__PURE__ */ __name(function mathrmSize2(value2, size5, mode, options3) {
        return buildCommon.makeSymbol(value2, "Size" + size5 + "-Regular", mode, options3);
      }, "mathrmSize");
      makeLargeDelim = /* @__PURE__ */ __name(function makeLargeDelim2(delim, size5, center4, options3, mode, classes6) {
        var inner2 = mathrmSize(delim, size5, mode, options3);
        var span = styleWrap(buildCommon.makeSpan(["delimsizing", "size" + size5], [inner2], options3), Style$1.TEXT, options3, classes6);
        if (center4) {
          centerSpan(span, options3, 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 = buildCommon.makeSpan(["delimsizinginner", sizeClass], [buildCommon.makeSpan([], [buildCommon.makeSymbol(symbol, font, mode)])]);
        return {
          type: "elem",
          elem: corner
        };
      }, "makeGlyphSpan");
      makeInner = /* @__PURE__ */ __name(function makeInner2(ch, height2, options3) {
        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 = buildCommon.makeSvgSpan([], [svgNode2], options3);
        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 = ["|", "\\lvert", "\\rvert", "\\vert"];
      doubleVerts = ["\\|", "\\lVert", "\\rVert", "\\Vert"];
      makeStackedDelim = /* @__PURE__ */ __name(function makeStackedDelim2(delim, heightTotal, center4, options3, mode, classes6) {
        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 (utils.contains(verts, delim)) {
          repeat2 = "\u2223";
          svgLabel = "vert";
          viewBoxWidth = 333;
        } else if (utils.contains(doubleVerts, 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 = options3.fontMetrics().axisHeight;
        if (center4) {
          axisHeight *= options3.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 = (viewBoxWidth / 1e3).toFixed(3) + "em";
          var height2 = (viewBoxHeight / 1e3).toFixed(3) + "em";
          var svg = new SvgNode([path4], {
            "width": width3,
            "height": height2,
            "viewBox": "0 0 " + viewBoxWidth + " " + viewBoxHeight
          });
          var wrapper = buildCommon.makeSvgSpan([], [svg], options3);
          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, options3));
          } else {
            var _innerHeight = (realHeightTotal - topHeightTotal - bottomHeightTotal - middleHeightTotal) / 2 + 2 * lapInEms;
            stack.push(makeInner(repeat2, _innerHeight, options3));
            stack.push(lap);
            stack.push(makeGlyphSpan(middle, font, mode));
            stack.push(lap);
            stack.push(makeInner(repeat2, _innerHeight, options3));
          }
          stack.push(lap);
          stack.push(makeGlyphSpan(top2, font, mode));
        }
        var newOptions = options3.havingBaseStyle(Style$1.TEXT);
        var inner2 = buildCommon.makeVList({
          positionType: "bottom",
          positionData: depth,
          children: stack
        }, newOptions);
        return styleWrap(buildCommon.makeSpan(["delimsizing", "mult"], [inner2], newOptions), Style$1.TEXT, options3, classes6);
      }, "makeStackedDelim");
      vbPad = 80;
      emPad = 0.08;
      sqrtSvg = /* @__PURE__ */ __name(function sqrtSvg2(sqrtName, height2, viewBoxHeight, extraVinculum, options3) {
        var path4 = sqrtPath(sqrtName, extraVinculum, viewBoxHeight);
        var pathNode = new PathNode(sqrtName, path4);
        var svg = 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 buildCommon.makeSvgSpan(["hide-tail"], [svg], options3);
      }, "sqrtSvg");
      makeSqrtImage = /* @__PURE__ */ __name(function makeSqrtImage2(height2, options3) {
        var newOptions = options3.havingBaseSizing();
        var delim = traverseSequence("\\surd", height2 * newOptions.sizeMultiplier, stackLargeDelimiterSequence, newOptions);
        var sizeMultiplier = newOptions.sizeMultiplier;
        var extraVinculum = Math.max(0, options3.minRuleThickness - options3.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, options3);
          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, options3);
          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, options3);
          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: (options3.fontMetrics().sqrtRuleThickness + extraVinculum) * sizeMultiplier
        };
      }, "makeSqrtImage");
      stackLargeDelimiters = ["(", "\\lparen", ")", "\\rparen", "[", "\\lbrack", "]", "\\rbrack", "\\{", "\\lbrace", "\\}", "\\rbrace", "\\lfloor", "\\rfloor", "\u230A", "\u230B", "\\lceil", "\\rceil", "\u2308", "\u2309", "\\surd"];
      stackAlwaysDelimiters = ["\\uparrow", "\\downarrow", "\\updownarrow", "\\Uparrow", "\\Downarrow", "\\Updownarrow", "|", "\\|", "\\vert", "\\Vert", "\\lvert", "\\rvert", "\\lVert", "\\rVert", "\\lgroup", "\\rgroup", "\u27EE", "\u27EF", "\\lmoustache", "\\rmoustache", "\u23B0", "\u23B1"];
      stackNeverDelimiters = ["<", ">", "\\langle", "\\rangle", "/", "\\backslash", "\\lt", "\\gt"];
      sizeToMaxHeight = [0, 1.2, 1.8, 2.4, 3];
      makeSizedDelim = /* @__PURE__ */ __name(function makeSizedDelim2(delim, size5, options3, mode, classes6) {
        if (delim === "<" || delim === "\\lt" || delim === "\u27E8") {
          delim = "\\langle";
        } else if (delim === ">" || delim === "\\gt" || delim === "\u27E9") {
          delim = "\\rangle";
        }
        if (utils.contains(stackLargeDelimiters, delim) || utils.contains(stackNeverDelimiters, delim)) {
          return makeLargeDelim(delim, size5, false, options3, mode, classes6);
        } else if (utils.contains(stackAlwaysDelimiters, delim)) {
          return makeStackedDelim(delim, sizeToMaxHeight[size5], false, options3, mode, classes6);
        } 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 {
          throw new Error("Add support for delim type '" + type3.type + "' here.");
        }
      }, "delimTypeToFont");
      traverseSequence = /* @__PURE__ */ __name(function traverseSequence2(delim, height2, sequence, options3) {
        var start3 = Math.min(2, 3 - options3.style.size);
        for (var i2 = start3; i2 < sequence.length; i2++) {
          if (sequence[i2].type === "stack") {
            break;
          }
          var metrics = getMetrics(delim, delimTypeToFont(sequence[i2]), "math");
          var heightDepth = metrics.height + metrics.depth;
          if (sequence[i2].type === "small") {
            var newOptions = options3.havingBaseStyle(sequence[i2].style);
            heightDepth *= newOptions.sizeMultiplier;
          }
          if (heightDepth > height2) {
            return sequence[i2];
          }
        }
        return sequence[sequence.length - 1];
      }, "traverseSequence");
      makeCustomSizedDelim = /* @__PURE__ */ __name(function makeCustomSizedDelim2(delim, height2, center4, options3, mode, classes6) {
        if (delim === "<" || delim === "\\lt" || delim === "\u27E8") {
          delim = "\\langle";
        } else if (delim === ">" || delim === "\\gt" || delim === "\u27E9") {
          delim = "\\rangle";
        }
        var sequence;
        if (utils.contains(stackNeverDelimiters, delim)) {
          sequence = stackNeverDelimiterSequence;
        } else if (utils.contains(stackLargeDelimiters, delim)) {
          sequence = stackLargeDelimiterSequence;
        } else {
          sequence = stackAlwaysDelimiterSequence;
        }
        var delimType = traverseSequence(delim, height2, sequence, options3);
        if (delimType.type === "small") {
          return makeSmallDelim(delim, delimType.style, center4, options3, mode, classes6);
        } else if (delimType.type === "large") {
          return makeLargeDelim(delim, delimType.size, center4, options3, mode, classes6);
        } else {
          return makeStackedDelim(delim, height2, center4, options3, mode, classes6);
        }
      }, "makeCustomSizedDelim");
      makeLeftRightDelim = /* @__PURE__ */ __name(function makeLeftRightDelim2(delim, height2, depth, options3, mode, classes6) {
        var axisHeight = options3.fontMetrics().axisHeight * options3.sizeMultiplier;
        var delimiterFactor = 901;
        var delimiterExtend = 5 / options3.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, options3, mode, classes6);
      }, "makeLeftRightDelim");
      delimiter = {
        sqrtImage: makeSqrtImage,
        sizedDelim: makeSizedDelim,
        sizeToMaxHeight,
        customSizedDelim: makeCustomSizedDelim,
        leftRightDelim: 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 = ["(", "\\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, options3) => {
          if (group2.delim === ".") {
            return buildCommon.makeSpan([group2.mclass]);
          }
          return delimiter.sizedDelim(group2.delim, group2.size, options3, group2.mode, [group2.mclass]);
        }, "htmlBuilder"),
        mathmlBuilder: /* @__PURE__ */ __name((group2) => {
          var children2 = [];
          if (group2.delim !== ".") {
            children2.push(makeText(group2.delim, group2.mode));
          }
          var node2 = new mathMLTree.MathNode("mo", children2);
          if (group2.mclass === "mopen" || group2.mclass === "mclose") {
            node2.setAttribute("fence", "true");
          } else {
            node2.setAttribute("fence", "false");
          }
          node2.setAttribute("stretchy", "true");
          var size5 = makeEm(delimiter.sizeToMaxHeight[group2.size]);
          node2.setAttribute("minsize", size5);
          node2.setAttribute("maxsize", size5);
          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 parser23 = context.parser;
          ++parser23.leftrightDepth;
          var body = parser23.parseExpression(false);
          --parser23.leftrightDepth;
          parser23.expect("\\right", false);
          var right3 = assertNodeType(parser23.parseFunction(), "leftright-right");
          return {
            type: "leftright",
            mode: parser23.mode,
            body,
            left: delim.text,
            right: right3.delim,
            rightColor: right3.color
          };
        }, "handler"),
        htmlBuilder: /* @__PURE__ */ __name((group2, options3) => {
          assertParsed(group2);
          var inner2 = buildExpression$1(group2.body, options3, 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 *= options3.sizeMultiplier;
          innerDepth *= options3.sizeMultiplier;
          var leftDelim;
          if (group2.left === ".") {
            leftDelim = makeNullDelimiter(options3, ["mopen"]);
          } else {
            leftDelim = delimiter.leftRightDelim(group2.left, innerHeight, innerDepth, options3, 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] = delimiter.leftRightDelim(isMiddle.delim, innerHeight, innerDepth, isMiddle.options, group2.mode, []);
              }
            }
          }
          var rightDelim;
          if (group2.right === ".") {
            rightDelim = makeNullDelimiter(options3, ["mclose"]);
          } else {
            var colorOptions = group2.rightColor ? options3.withColor(group2.rightColor) : options3;
            rightDelim = delimiter.leftRightDelim(group2.right, innerHeight, innerDepth, colorOptions, group2.mode, ["mclose"]);
          }
          inner2.push(rightDelim);
          return buildCommon.makeSpan(["minner"], inner2, options3);
        }, "htmlBuilder"),
        mathmlBuilder: /* @__PURE__ */ __name((group2, options3) => {
          assertParsed(group2);
          var inner2 = buildExpression2(group2.body, options3);
          if (group2.left !== ".") {
            var leftNode = new mathMLTree.MathNode("mo", [makeText(group2.left, group2.mode)]);
            leftNode.setAttribute("fence", "true");
            inner2.unshift(leftNode);
          }
          if (group2.right !== ".") {
            var rightNode = new mathMLTree.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, options3) => {
          var middleDelim;
          if (group2.delim === ".") {
            middleDelim = makeNullDelimiter(options3, []);
          } else {
            middleDelim = delimiter.sizedDelim(group2.delim, 1, options3, group2.mode, []);
            var isMiddle = {
              delim: group2.delim,
              options: options3
            };
            middleDelim.isMiddle = isMiddle;
          }
          return middleDelim;
        }, "htmlBuilder"),
        mathmlBuilder: /* @__PURE__ */ __name((group2, options3) => {
          var textNode = group2.delim === "\\vert" || group2.delim === "|" ? makeText("|", "text") : makeText(group2.delim, group2.mode);
          var middleNode = new mathMLTree.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, options3) => {
        var inner2 = buildCommon.wrapFragment(buildGroup$1(group2.body, options3), options3);
        var label = group2.label.slice(1);
        var scale = options3.sizeMultiplier;
        var img;
        var imgShift = 0;
        var isSingleChar = utils.isCharacterBox(group2.body);
        if (label === "sout") {
          img = buildCommon.makeSpan(["stretchy", "sout"]);
          img.height = options3.fontMetrics().defaultRuleThickness / scale;
          imgShift = -0.5 * options3.fontMetrics().xHeight;
        } else if (label === "phase") {
          var lineWeight = calculateSize2({
            number: 0.6,
            unit: "pt"
          }, options3);
          var clearance = calculateSize2({
            number: 0.35,
            unit: "ex"
          }, options3);
          var newOptions = options3.havingBaseSizing();
          scale = scale / newOptions.sizeMultiplier;
          var angleHeight = inner2.height + inner2.depth + lineWeight + clearance;
          inner2.style.paddingLeft = makeEm(angleHeight / 2 + lineWeight);
          var viewBoxHeight = Math.floor(1e3 * angleHeight * scale);
          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 = buildCommon.makeSvgSpan(["hide-tail"], [svgNode2], options3);
          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(
              options3.fontMetrics().fboxrule,
              // default
              options3.minRuleThickness
              // User override.
            );
            topPad = options3.fontMetrics().fboxsep + (label === "colorbox" ? 0 : ruleThickness);
            bottomPad = topPad;
          } else if (label === "angl") {
            ruleThickness = Math.max(options3.fontMetrics().defaultRuleThickness, options3.minRuleThickness);
            topPad = 4 * ruleThickness;
            bottomPad = Math.max(0, 0.25 - inner2.depth);
          } else {
            topPad = isSingleChar ? 0.2 : 0;
            bottomPad = topPad;
          }
          img = stretchy.encloseSpan(inner2, label, topPad, bottomPad, options3);
          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 = buildCommon.makeVList({
            positionType: "individualShift",
            children: [
              // Put the color background behind inner;
              {
                type: "elem",
                elem: img,
                shift: imgShift
              },
              {
                type: "elem",
                elem: inner2,
                shift: 0
              }
            ]
          }, options3);
        } else {
          var classes6 = /cancel|phase/.test(label) ? ["svg-align"] : [];
          vlist = buildCommon.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: classes6
              }
            ]
          }, options3);
        }
        if (/cancel/.test(label)) {
          vlist.height = inner2.height;
          vlist.depth = inner2.depth;
        }
        if (/cancel/.test(label) && !isSingleChar) {
          return buildCommon.makeSpan(["mord", "cancel-lap"], [vlist], options3);
        } else {
          return buildCommon.makeSpan(["mord"], [vlist], options3);
        }
      }, "htmlBuilder$7");
      mathmlBuilder$6 = /* @__PURE__ */ __name((group2, options3) => {
        var fboxsep = 0;
        var node2 = new mathMLTree.MathNode(group2.label.indexOf("colorbox") > -1 ? "mpadded" : "menclose", [buildGroup2(group2.body, options3)]);
        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 = options3.fontMetrics().fboxsep * options3.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(
                options3.fontMetrics().fboxrule,
                // default
                options3.minRuleThickness
                // user override
              );
              node2.setAttribute("style", "border: " + thk + "em solid " + String(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: parser23,
            funcName
          } = _ref;
          var color2 = assertNodeType(args[0], "color-token").color;
          var body = args[1];
          return {
            type: "enclose",
            mode: parser23.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: parser23,
            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: parser23.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: parser23
          } = _ref3;
          return {
            type: "enclose",
            mode: parser23.mode,
            label: "\\fbox",
            body: args[0]
          };
        }
      });
      defineFunction({
        type: "enclose",
        names: ["\\cancel", "\\bcancel", "\\xcancel", "\\sout", "\\phase"],
        props: {
          numArgs: 1
        },
        handler(_ref4, args) {
          var {
            parser: parser23,
            funcName
          } = _ref4;
          var body = args[0];
          return {
            type: "enclose",
            mode: parser23.mode,
            label: funcName,
            body
          };
        },
        htmlBuilder: htmlBuilder$7,
        mathmlBuilder: mathmlBuilder$6
      });
      defineFunction({
        type: "enclose",
        names: ["\\angl"],
        props: {
          numArgs: 1,
          argTypes: ["hbox"],
          allowedInText: false
        },
        handler(_ref5, args) {
          var {
            parser: parser23
          } = _ref5;
          return {
            type: "enclose",
            mode: parser23.mode,
            label: "\\angl",
            body: args[0]
          };
        }
      });
      _environments = {};
      __name(defineEnvironment, "defineEnvironment");
      _macros = {};
      __name(defineMacro, "defineMacro");
      __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");
      __name(getAutoTag, "getAutoTag");
      __name(parseArray, "parseArray");
      __name(dCellStyle, "dCellStyle");
      htmlBuilder$6 = /* @__PURE__ */ __name(function htmlBuilder(group2, options3) {
        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.
          options3.fontMetrics().arrayRuleWidth,
          options3.minRuleThickness
          // User override.
        );
        var pt = 1 / options3.fontMetrics().ptPerEm;
        var arraycolsep = 5 * pt;
        if (group2.colSeparationType && group2.colSeparationType === "small") {
          var localMultiplier = options3.havingStyle(Style$1.SCRIPT).sizeMultiplier;
          arraycolsep = 0.2778 * (localMultiplier / options3.sizeMultiplier);
        }
        var baselineskip = group2.colSeparationType === "CD" ? calculateSize2({
          number: 3,
          unit: "ex"
        }, options3) : 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], options3);
            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, options3);
            if (gap > 0) {
              gap += arstrutDepth;
              if (depth < gap) {
                depth = gap;
              }
              gap = 0;
            }
          }
          if (group2.addJot) {
            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 + options3.fontMetrics().axisHeight;
        var colDescriptions = group2.cols || [];
        var cols = [];
        var colSep;
        var colDescrNum;
        var tagSpans = [];
        if (group2.tags && group2.tags.some((tag3) => tag3)) {
          for (r2 = 0; r2 < nr; ++r2) {
            var rw = body[r2];
            var shift2 = rw.pos - offset;
            var tag2 = group2.tags[r2];
            var tagSpan = void 0;
            if (tag2 === true) {
              tagSpan = buildCommon.makeSpan(["eqn-num"], [], options3);
            } else if (tag2 === false) {
              tagSpan = buildCommon.makeSpan([], [], options3);
            } else {
              tagSpan = buildCommon.makeSpan([], buildExpression$1(tag2, options3, true), options3);
            }
            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 colDescr = colDescriptions[colDescrNum] || {};
          var firstSeparator = true;
          while (colDescr.type === "separator") {
            if (!firstSeparator) {
              colSep = buildCommon.makeSpan(["arraycolsep"], []);
              colSep.style.width = makeEm(options3.fontMetrics().doubleRuleSep);
              cols.push(colSep);
            }
            if (colDescr.separator === "|" || colDescr.separator === ":") {
              var lineType3 = colDescr.separator === "|" ? "solid" : "dashed";
              var separator = buildCommon.makeSpan(["vertical-separator"], [], options3);
              separator.style.height = makeEm(totalHeight);
              separator.style.borderRightWidth = makeEm(ruleThickness);
              separator.style.borderRightStyle = lineType3;
              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) {
            sepwidth = utils.deflt(colDescr.pregap, arraycolsep);
            if (sepwidth !== 0) {
              colSep = buildCommon.makeSpan(["arraycolsep"], []);
              colSep.style.width = makeEm(sepwidth);
              cols.push(colSep);
            }
          }
          var col = [];
          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;
            col.push({
              type: "elem",
              elem,
              shift: _shift2
            });
          }
          col = buildCommon.makeVList({
            positionType: "individualShift",
            children: col
          }, options3);
          col = buildCommon.makeSpan(["col-align-" + (colDescr.align || "c")], [col]);
          cols.push(col);
          if (c3 < nc - 1 || group2.hskipBeforeAndAfter) {
            sepwidth = utils.deflt(colDescr.postgap, arraycolsep);
            if (sepwidth !== 0) {
              colSep = buildCommon.makeSpan(["arraycolsep"], []);
              colSep.style.width = makeEm(sepwidth);
              cols.push(colSep);
            }
          }
        }
        body = buildCommon.makeSpan(["mtable"], cols);
        if (hlines.length > 0) {
          var line2 = buildCommon.makeLineSpan("hline", options3, ruleThickness);
          var dashes = buildCommon.makeLineSpan("hdashline", options3, ruleThickness);
          var vListElems = [{
            type: "elem",
            elem: body,
            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
              });
            }
          }
          body = buildCommon.makeVList({
            positionType: "individualShift",
            children: vListElems
          }, options3);
        }
        if (tagSpans.length === 0) {
          return buildCommon.makeSpan(["mord"], [body], options3);
        } else {
          var eqnNumCol = buildCommon.makeVList({
            positionType: "individualShift",
            children: tagSpans
          }, options3);
          eqnNumCol = buildCommon.makeSpan(["tag"], [eqnNumCol], options3);
          return buildCommon.makeFragment([body, eqnNumCol]);
        }
      }, "htmlBuilder");
      alignMap = {
        c: "center ",
        l: "left ",
        r: "right "
      };
      mathmlBuilder$5 = /* @__PURE__ */ __name(function mathmlBuilder(group2, options3) {
        var tbl = [];
        var glue = new mathMLTree.MathNode("mtd", [], ["mtr-glue"]);
        var tag2 = new mathMLTree.MathNode("mtd", [], ["mml-eqn-num"]);
        for (var i2 = 0; i2 < group2.body.length; i2++) {
          var rw = group2.body[i2];
          var row = [];
          for (var j2 = 0; j2 < rw.length; j2++) {
            row.push(new mathMLTree.MathNode("mtd", [buildGroup2(rw[j2], options3)]));
          }
          if (group2.tags && group2.tags[i2]) {
            row.unshift(glue);
            row.push(glue);
            if (group2.leqno) {
              row.unshift(tag2);
            } else {
              row.push(tag2);
            }
          }
          tbl.push(new mathMLTree.MathNode("mtr", row));
        }
        var table = new mathMLTree.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++) {
            if (cols[_i].type === "align") {
              align += alignMap[cols[_i].align];
              if (prevTypeWasAlign) {
                columnLines += "none ";
              }
              prevTypeWasAlign = true;
            } else if (cols[_i].type === "separator") {
              if (prevTypeWasAlign) {
                columnLines += cols[_i].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 mathMLTree.MathNode("menclose", [table]);
          table.setAttribute("notation", menclose.trim());
        }
        if (group2.arraystretch && group2.arraystretch < 1) {
          table = new mathMLTree.MathNode("mstyle", [table]);
          table.setAttribute("scriptlevel", "1");
        }
        return table;
      }, "mathmlBuilder");
      alignedHandler = /* @__PURE__ */ __name(function alignedHandler2(context, args) {
        if (context.envName.indexOf("ed") === -1) {
          validateAmsEnvironmentContext(context);
        }
        var cols = [];
        var separationType = context.envName.indexOf("at") > -1 ? "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;
        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".indexOf(ca) !== -1) {
              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 parser23 = context.parser;
            parser23.consumeSpaces();
            if (parser23.fetch().text === "[") {
              parser23.consume();
              parser23.consumeSpaces();
              colAlign = parser23.fetch().text;
              if ("lcr".indexOf(colAlign) === -1) {
                throw new ParseError("Expected l or c or r", parser23.nextToken);
              }
              parser23.consume();
              parser23.consumeSpaces();
              parser23.expect("]");
              parser23.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".indexOf(ca) !== -1) {
              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 res = {
            cols,
            hskipBeforeAndAfter: false,
            arraystretch: 0.5
          };
          res = parseArray(context.parser, res, "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.indexOf("r") > -1 ? "." : "\\{",
            right: context.envName.indexOf("r") > -1 ? "\\}" : ".",
            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 (utils.contains(["gather", "gather*"], 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: parser23,
            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
            } = parser23.parseArguments("\\begin{" + envName + "}", env);
            var context = {
              mode: parser23.mode,
              envName,
              parser: parser23
            };
            var result = env.handler(context, _args, optArgs);
            parser23.expect("\\end", false);
            var endNameToken = parser23.nextToken;
            var end2 = assertNodeType(parser23.parseFunction(), "environment");
            if (end2.name !== envName) {
              throw new ParseError("Mismatch: \\begin{" + envName + "} matched by \\end{" + end2.name + "}", endNameToken);
            }
            return result;
          }
          return {
            type: "environment",
            mode: parser23.mode,
            name: envName,
            nameGroup
          };
        }
      });
      htmlBuilder$5 = /* @__PURE__ */ __name((group2, options3) => {
        var font = group2.font;
        var newOptions = options3.withFont(font);
        return buildGroup$1(group2.body, newOptions);
      }, "htmlBuilder$5");
      mathmlBuilder$4 = /* @__PURE__ */ __name((group2, options3) => {
        var font = group2.font;
        var newOptions = options3.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",
          // 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: parser23,
            funcName
          } = _ref;
          var body = normalizeArgument(args[0]);
          var func = funcName;
          if (func in fontAliases) {
            func = fontAliases[func];
          }
          return {
            type: "font",
            mode: parser23.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: parser23
          } = _ref2;
          var body = args[0];
          var isCharacterBox3 = utils.isCharacterBox(body);
          return {
            type: "mclass",
            mode: parser23.mode,
            mclass: binrelClass(body),
            body: [{
              type: "font",
              mode: parser23.mode,
              font: "boldsymbol",
              body
            }],
            isCharacterBox: isCharacterBox3
          };
        }, "handler")
      });
      defineFunction({
        type: "font",
        names: ["\\rm", "\\sf", "\\tt", "\\bf", "\\it", "\\cal"],
        props: {
          numArgs: 0,
          allowedInText: true
        },
        handler: /* @__PURE__ */ __name((_ref3, args) => {
          var {
            parser: parser23,
            funcName,
            breakOnTokenText
          } = _ref3;
          var {
            mode
          } = parser23;
          var body = parser23.parseExpression(true, breakOnTokenText);
          var style3 = "math" + funcName.slice(1);
          return {
            type: "font",
            mode,
            font: style3,
            body: {
              type: "ordgroup",
              mode: parser23.mode,
              body
            }
          };
        }, "handler"),
        htmlBuilder: htmlBuilder$5,
        mathmlBuilder: mathmlBuilder$4
      });
      adjustStyle = /* @__PURE__ */ __name((size5, originalStyle) => {
        var style3 = originalStyle;
        if (size5 === "display") {
          style3 = style3.id >= Style$1.SCRIPT.id ? style3.text() : Style$1.DISPLAY;
        } else if (size5 === "text" && style3.size === Style$1.DISPLAY.size) {
          style3 = Style$1.TEXT;
        } else if (size5 === "script") {
          style3 = Style$1.SCRIPT;
        } else if (size5 === "scriptscript") {
          style3 = Style$1.SCRIPTSCRIPT;
        }
        return style3;
      }, "adjustStyle");
      htmlBuilder$4 = /* @__PURE__ */ __name((group2, options3) => {
        var style3 = adjustStyle(group2.size, options3.style);
        var nstyle = style3.fracNum();
        var dstyle = style3.fracDen();
        var newOptions;
        newOptions = options3.havingStyle(nstyle);
        var numerm = buildGroup$1(group2.numer, newOptions, options3);
        if (group2.continued) {
          var hStrut = 8.5 / options3.fontMetrics().ptPerEm;
          var dStrut = 3.5 / options3.fontMetrics().ptPerEm;
          numerm.height = numerm.height < hStrut ? hStrut : numerm.height;
          numerm.depth = numerm.depth < dStrut ? dStrut : numerm.depth;
        }
        newOptions = options3.havingStyle(dstyle);
        var denomm = buildGroup$1(group2.denom, newOptions, options3);
        var rule;
        var ruleWidth;
        var ruleSpacing;
        if (group2.hasBarLine) {
          if (group2.barSize) {
            ruleWidth = calculateSize2(group2.barSize, options3);
            rule = buildCommon.makeLineSpan("frac-line", options3, ruleWidth);
          } else {
            rule = buildCommon.makeLineSpan("frac-line", options3);
          }
          ruleWidth = rule.height;
          ruleSpacing = rule.height;
        } else {
          rule = null;
          ruleWidth = 0;
          ruleSpacing = options3.fontMetrics().defaultRuleThickness;
        }
        var numShift;
        var clearance;
        var denomShift;
        if (style3.size === Style$1.DISPLAY.size || group2.size === "display") {
          numShift = options3.fontMetrics().num1;
          if (ruleWidth > 0) {
            clearance = 3 * ruleSpacing;
          } else {
            clearance = 7 * ruleSpacing;
          }
          denomShift = options3.fontMetrics().denom1;
        } else {
          if (ruleWidth > 0) {
            numShift = options3.fontMetrics().num2;
            clearance = ruleSpacing;
          } else {
            numShift = options3.fontMetrics().num3;
            clearance = 3 * ruleSpacing;
          }
          denomShift = options3.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 = buildCommon.makeVList({
            positionType: "individualShift",
            children: [{
              type: "elem",
              elem: denomm,
              shift: denomShift
            }, {
              type: "elem",
              elem: numerm,
              shift: -numShift
            }]
          }, options3);
        } else {
          var axisHeight = options3.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 = buildCommon.makeVList({
            positionType: "individualShift",
            children: [{
              type: "elem",
              elem: denomm,
              shift: denomShift
            }, {
              type: "elem",
              elem: rule,
              shift: midShift
            }, {
              type: "elem",
              elem: numerm,
              shift: -numShift
            }]
          }, options3);
        }
        newOptions = options3.havingStyle(style3);
        frac.height *= newOptions.sizeMultiplier / options3.sizeMultiplier;
        frac.depth *= newOptions.sizeMultiplier / options3.sizeMultiplier;
        var delimSize;
        if (style3.size === Style$1.DISPLAY.size) {
          delimSize = options3.fontMetrics().delim1;
        } else if (style3.size === Style$1.SCRIPTSCRIPT.size) {
          delimSize = options3.havingStyle(Style$1.SCRIPT).fontMetrics().delim2;
        } else {
          delimSize = options3.fontMetrics().delim2;
        }
        var leftDelim;
        var rightDelim;
        if (group2.leftDelim == null) {
          leftDelim = makeNullDelimiter(options3, ["mopen"]);
        } else {
          leftDelim = delimiter.customSizedDelim(group2.leftDelim, delimSize, true, options3.havingStyle(style3), group2.mode, ["mopen"]);
        }
        if (group2.continued) {
          rightDelim = buildCommon.makeSpan([]);
        } else if (group2.rightDelim == null) {
          rightDelim = makeNullDelimiter(options3, ["mclose"]);
        } else {
          rightDelim = delimiter.customSizedDelim(group2.rightDelim, delimSize, true, options3.havingStyle(style3), group2.mode, ["mclose"]);
        }
        return buildCommon.makeSpan(["mord"].concat(newOptions.sizingClasses(options3)), [leftDelim, buildCommon.makeSpan(["mfrac"], [frac]), rightDelim], options3);
      }, "htmlBuilder$4");
      mathmlBuilder$3 = /* @__PURE__ */ __name((group2, options3) => {
        var node2 = new mathMLTree.MathNode("mfrac", [buildGroup2(group2.numer, options3), buildGroup2(group2.denom, options3)]);
        if (!group2.hasBarLine) {
          node2.setAttribute("linethickness", "0px");
        } else if (group2.barSize) {
          var ruleWidth = calculateSize2(group2.barSize, options3);
          node2.setAttribute("linethickness", makeEm(ruleWidth));
        }
        var style3 = adjustStyle(group2.size, options3.style);
        if (style3.size !== options3.style.size) {
          node2 = new mathMLTree.MathNode("mstyle", [node2]);
          var isDisplay = style3.size === Style$1.DISPLAY.size ? "true" : "false";
          node2.setAttribute("displaystyle", isDisplay);
          node2.setAttribute("scriptlevel", "0");
        }
        if (group2.leftDelim != null || group2.rightDelim != null) {
          var withDelims = [];
          if (group2.leftDelim != null) {
            var leftOp = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(group2.leftDelim.replace("\\", ""))]);
            leftOp.setAttribute("fence", "true");
            withDelims.push(leftOp);
          }
          withDelims.push(node2);
          if (group2.rightDelim != null) {
            var rightOp = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(group2.rightDelim.replace("\\", ""))]);
            rightOp.setAttribute("fence", "true");
            withDelims.push(rightOp);
          }
          return makeRow(withDelims);
        }
        return node2;
      }, "mathmlBuilder$3");
      defineFunction({
        type: "genfrac",
        names: [
          "\\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: parser23,
            funcName
          } = _ref;
          var numer = args[0];
          var denom = args[1];
          var hasBarLine;
          var leftDelim = null;
          var rightDelim = null;
          var size5 = "auto";
          switch (funcName) {
            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");
          }
          switch (funcName) {
            case "\\dfrac":
            case "\\dbinom":
              size5 = "display";
              break;
            case "\\tfrac":
            case "\\tbinom":
              size5 = "text";
              break;
          }
          return {
            type: "genfrac",
            mode: parser23.mode,
            continued: false,
            numer,
            denom,
            hasBarLine,
            leftDelim,
            rightDelim,
            size: size5,
            barSize: null
          };
        }, "handler"),
        htmlBuilder: htmlBuilder$4,
        mathmlBuilder: mathmlBuilder$3
      });
      defineFunction({
        type: "genfrac",
        names: ["\\cfrac"],
        props: {
          numArgs: 2
        },
        handler: /* @__PURE__ */ __name((_ref2, args) => {
          var {
            parser: parser23,
            funcName
          } = _ref2;
          var numer = args[0];
          var denom = args[1];
          return {
            type: "genfrac",
            mode: parser23.mode,
            continued: true,
            numer,
            denom,
            hasBarLine: true,
            leftDelim: null,
            rightDelim: null,
            size: "display",
            barSize: null
          };
        }, "handler")
      });
      defineFunction({
        type: "infix",
        names: ["\\over", "\\choose", "\\atop", "\\brace", "\\brack"],
        props: {
          numArgs: 0,
          infix: true
        },
        handler(_ref3) {
          var {
            parser: parser23,
            funcName,
            token: token2
          } = _ref3;
          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: parser23.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(_ref4, args) {
          var {
            parser: parser23
          } = _ref4;
          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 size5 = "auto";
          var styl = args[3];
          if (styl.type === "ordgroup") {
            if (styl.body.length > 0) {
              var textOrd = assertNodeType(styl.body[0], "textord");
              size5 = stylArray[Number(textOrd.text)];
            }
          } else {
            styl = assertNodeType(styl, "textord");
            size5 = stylArray[Number(styl.text)];
          }
          return {
            type: "genfrac",
            mode: parser23.mode,
            numer,
            denom,
            continued: false,
            hasBarLine,
            barSize,
            leftDelim,
            rightDelim,
            size: size5
          };
        },
        htmlBuilder: htmlBuilder$4,
        mathmlBuilder: mathmlBuilder$3
      });
      defineFunction({
        type: "infix",
        names: ["\\above"],
        props: {
          numArgs: 1,
          argTypes: ["size"],
          infix: true
        },
        handler(_ref5, args) {
          var {
            parser: parser23,
            funcName,
            token: token2
          } = _ref5;
          return {
            type: "infix",
            mode: parser23.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((_ref6, args) => {
          var {
            parser: parser23,
            funcName
          } = _ref6;
          var numer = args[0];
          var barSize = assert(assertNodeType(args[1], "infix").size);
          var denom = args[2];
          var hasBarLine = barSize.number > 0;
          return {
            type: "genfrac",
            mode: parser23.mode,
            numer,
            denom,
            continued: false,
            hasBarLine,
            barSize,
            leftDelim: null,
            rightDelim: null,
            size: "auto"
          };
        }, "handler"),
        htmlBuilder: htmlBuilder$4,
        mathmlBuilder: mathmlBuilder$3
      });
      htmlBuilder$3 = /* @__PURE__ */ __name((grp, options3) => {
        var style3 = options3.style;
        var supSubGroup;
        var group2;
        if (grp.type === "supsub") {
          supSubGroup = grp.sup ? buildGroup$1(grp.sup, options3.havingStyle(style3.sup()), options3) : buildGroup$1(grp.sub, options3.havingStyle(style3.sub()), options3);
          group2 = assertNodeType(grp.base, "horizBrace");
        } else {
          group2 = assertNodeType(grp, "horizBrace");
        }
        var body = buildGroup$1(group2.base, options3.havingBaseStyle(Style$1.DISPLAY));
        var braceBody = stretchy.svgSpan(group2, options3);
        var vlist;
        if (group2.isOver) {
          vlist = buildCommon.makeVList({
            positionType: "firstBaseline",
            children: [{
              type: "elem",
              elem: body
            }, {
              type: "kern",
              size: 0.1
            }, {
              type: "elem",
              elem: braceBody
            }]
          }, options3);
          vlist.children[0].children[0].children[1].classes.push("svg-align");
        } else {
          vlist = buildCommon.makeVList({
            positionType: "bottom",
            positionData: body.depth + 0.1 + braceBody.height,
            children: [{
              type: "elem",
              elem: braceBody
            }, {
              type: "kern",
              size: 0.1
            }, {
              type: "elem",
              elem: body
            }]
          }, options3);
          vlist.children[0].children[0].children[0].classes.push("svg-align");
        }
        if (supSubGroup) {
          var vSpan = buildCommon.makeSpan(["mord", group2.isOver ? "mover" : "munder"], [vlist], options3);
          if (group2.isOver) {
            vlist = buildCommon.makeVList({
              positionType: "firstBaseline",
              children: [{
                type: "elem",
                elem: vSpan
              }, {
                type: "kern",
                size: 0.2
              }, {
                type: "elem",
                elem: supSubGroup
              }]
            }, options3);
          } else {
            vlist = buildCommon.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
              }]
            }, options3);
          }
        }
        return buildCommon.makeSpan(["mord", group2.isOver ? "mover" : "munder"], [vlist], options3);
      }, "htmlBuilder$3");
      mathmlBuilder$2 = /* @__PURE__ */ __name((group2, options3) => {
        var accentNode = stretchy.mathMLnode(group2.label);
        return new mathMLTree.MathNode(group2.isOver ? "mover" : "munder", [buildGroup2(group2.base, options3), accentNode]);
      }, "mathmlBuilder$2");
      defineFunction({
        type: "horizBrace",
        names: ["\\overbrace", "\\underbrace"],
        props: {
          numArgs: 1
        },
        handler(_ref, args) {
          var {
            parser: parser23,
            funcName
          } = _ref;
          return {
            type: "horizBrace",
            mode: parser23.mode,
            label: funcName,
            isOver: /^\\over/.test(funcName),
            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: parser23
          } = _ref;
          var body = args[1];
          var href = assertNodeType(args[0], "url").url;
          if (!parser23.settings.isTrusted({
            command: "\\href",
            url: href
          })) {
            return parser23.formatUnsupportedCmd("\\href");
          }
          return {
            type: "href",
            mode: parser23.mode,
            href,
            body: ordargument(body)
          };
        }, "handler"),
        htmlBuilder: /* @__PURE__ */ __name((group2, options3) => {
          var elements4 = buildExpression$1(group2.body, options3, false);
          return buildCommon.makeAnchor(group2.href, [], elements4, options3);
        }, "htmlBuilder"),
        mathmlBuilder: /* @__PURE__ */ __name((group2, options3) => {
          var math2 = buildExpressionRow(group2.body, options3);
          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: parser23
          } = _ref2;
          var href = assertNodeType(args[0], "url").url;
          if (!parser23.settings.isTrusted({
            command: "\\url",
            url: href
          })) {
            return parser23.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: parser23.mode,
            font: "\\texttt",
            body: chars
          };
          return {
            type: "href",
            mode: parser23.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: parser23
          } = _ref;
          return {
            type: "hbox",
            mode: parser23.mode,
            body: ordargument(args[0])
          };
        },
        htmlBuilder(group2, options3) {
          var elements4 = buildExpression$1(group2.body, options3, false);
          return buildCommon.makeFragment(elements4);
        },
        mathmlBuilder(group2, options3) {
          return new mathMLTree.MathNode("mrow", buildExpression2(group2.body, options3));
        }
      });
      defineFunction({
        type: "html",
        names: ["\\htmlClass", "\\htmlId", "\\htmlStyle", "\\htmlData"],
        props: {
          numArgs: 2,
          argTypes: ["raw", "original"],
          allowedInText: true
        },
        handler: /* @__PURE__ */ __name((_ref, args) => {
          var {
            parser: parser23,
            funcName,
            token: token2
          } = _ref;
          var value2 = assertNodeType(args[0], "raw").string;
          var body = args[1];
          if (parser23.settings.strict) {
            parser23.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 data5 = value2.split(",");
              for (var i2 = 0; i2 < data5.length; i2++) {
                var keyVal = data5[i2].split("=");
                if (keyVal.length !== 2) {
                  throw new ParseError("Error parsing key-value for \\htmlData");
                }
                attributes["data-" + keyVal[0].trim()] = keyVal[1].trim();
              }
              trustContext = {
                command: "\\htmlData",
                attributes
              };
              break;
            }
            default:
              throw new Error("Unrecognized html command");
          }
          if (!parser23.settings.isTrusted(trustContext)) {
            return parser23.formatUnsupportedCmd(funcName);
          }
          return {
            type: "html",
            mode: parser23.mode,
            attributes,
            body: ordargument(body)
          };
        }, "handler"),
        htmlBuilder: /* @__PURE__ */ __name((group2, options3) => {
          var elements4 = buildExpression$1(group2.body, options3, false);
          var classes6 = ["enclosing"];
          if (group2.attributes.class) {
            classes6.push(...group2.attributes.class.trim().split(/\s+/));
          }
          var span = buildCommon.makeSpan(classes6, elements4, options3);
          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, options3) => {
          return buildExpressionRow(group2.body, options3);
        }, "mathmlBuilder")
      });
      defineFunction({
        type: "htmlmathml",
        names: ["\\html@mathml"],
        props: {
          numArgs: 2,
          allowedInText: true
        },
        handler: /* @__PURE__ */ __name((_ref, args) => {
          var {
            parser: parser23
          } = _ref;
          return {
            type: "htmlmathml",
            mode: parser23.mode,
            html: ordargument(args[0]),
            mathml: ordargument(args[1])
          };
        }, "handler"),
        htmlBuilder: /* @__PURE__ */ __name((group2, options3) => {
          var elements4 = buildExpression$1(group2.html, options3, false);
          return buildCommon.makeFragment(elements4);
        }, "htmlBuilder"),
        mathmlBuilder: /* @__PURE__ */ __name((group2, options3) => {
          return buildExpressionRow(group2.mathml, options3);
        }, "mathmlBuilder")
      });
      sizeData = /* @__PURE__ */ __name(function sizeData2(str2) {
        if (/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(str2)) {
          return {
            number: +str2,
            unit: "bp"
          };
        } else {
          var match2 = /([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(str2);
          if (!match2) {
            throw new ParseError("Invalid size: '" + str2 + "' in \\includegraphics");
          }
          var data5 = {
            number: +(match2[1] + match2[2]),
            // sign + magnitude, cast to number
            unit: match2[3]
          };
          if (!validUnit(data5)) {
            throw new ParseError("Invalid unit: '" + data5.unit + "' in \\includegraphics.");
          }
          return data5;
        }
      }, "sizeData");
      defineFunction({
        type: "includegraphics",
        names: ["\\includegraphics"],
        props: {
          numArgs: 1,
          numOptionalArgs: 1,
          argTypes: ["raw", "url"],
          allowedInText: false
        },
        handler: /* @__PURE__ */ __name((_ref, args, optArgs) => {
          var {
            parser: parser23
          } = _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 (!parser23.settings.isTrusted({
            command: "\\includegraphics",
            url: src
          })) {
            return parser23.formatUnsupportedCmd("\\includegraphics");
          }
          return {
            type: "includegraphics",
            mode: parser23.mode,
            alt,
            width: width3,
            height: height2,
            totalheight,
            src
          };
        }, "handler"),
        htmlBuilder: /* @__PURE__ */ __name((group2, options3) => {
          var height2 = calculateSize2(group2.height, options3);
          var depth = 0;
          if (group2.totalheight.number > 0) {
            depth = calculateSize2(group2.totalheight, options3) - height2;
          }
          var width3 = 0;
          if (group2.width.number > 0) {
            width3 = calculateSize2(group2.width, options3);
          }
          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, options3) => {
          var node2 = new mathMLTree.MathNode("mglyph", []);
          node2.setAttribute("alt", group2.alt);
          var height2 = calculateSize2(group2.height, options3);
          var depth = 0;
          if (group2.totalheight.number > 0) {
            depth = calculateSize2(group2.totalheight, options3) - height2;
            node2.setAttribute("valign", makeEm(-depth));
          }
          node2.setAttribute("height", makeEm(height2 + depth));
          if (group2.width.number > 0) {
            var width3 = calculateSize2(group2.width, options3);
            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: parser23,
            funcName
          } = _ref;
          var size5 = assertNodeType(args[0], "size");
          if (parser23.settings.strict) {
            var mathFunction = funcName[1] === "m";
            var muUnit = size5.value.unit === "mu";
            if (mathFunction) {
              if (!muUnit) {
                parser23.settings.reportNonstrict("mathVsTextUnits", "LaTeX's " + funcName + " supports only mu units, " + ("not " + size5.value.unit + " units"));
              }
              if (parser23.mode !== "math") {
                parser23.settings.reportNonstrict("mathVsTextUnits", "LaTeX's " + funcName + " works only in math mode");
              }
            } else {
              if (muUnit) {
                parser23.settings.reportNonstrict("mathVsTextUnits", "LaTeX's " + funcName + " doesn't support mu units");
              }
            }
          }
          return {
            type: "kern",
            mode: parser23.mode,
            dimension: size5.value
          };
        },
        htmlBuilder(group2, options3) {
          return buildCommon.makeGlue(group2.dimension, options3);
        },
        mathmlBuilder(group2, options3) {
          var dimension = calculateSize2(group2.dimension, options3);
          return new mathMLTree.SpaceNode(dimension);
        }
      });
      defineFunction({
        type: "lap",
        names: ["\\mathllap", "\\mathrlap", "\\mathclap"],
        props: {
          numArgs: 1,
          allowedInText: true
        },
        handler: /* @__PURE__ */ __name((_ref, args) => {
          var {
            parser: parser23,
            funcName
          } = _ref;
          var body = args[0];
          return {
            type: "lap",
            mode: parser23.mode,
            alignment: funcName.slice(5),
            body
          };
        }, "handler"),
        htmlBuilder: /* @__PURE__ */ __name((group2, options3) => {
          var inner2;
          if (group2.alignment === "clap") {
            inner2 = buildCommon.makeSpan([], [buildGroup$1(group2.body, options3)]);
            inner2 = buildCommon.makeSpan(["inner"], [inner2], options3);
          } else {
            inner2 = buildCommon.makeSpan(["inner"], [buildGroup$1(group2.body, options3)]);
          }
          var fix = buildCommon.makeSpan(["fix"], []);
          var node2 = buildCommon.makeSpan([group2.alignment], [inner2, fix], options3);
          var strut = buildCommon.makeSpan(["strut"]);
          strut.style.height = makeEm(node2.height + node2.depth);
          if (node2.depth) {
            strut.style.verticalAlign = makeEm(-node2.depth);
          }
          node2.children.unshift(strut);
          node2 = buildCommon.makeSpan(["thinbox"], [node2], options3);
          return buildCommon.makeSpan(["mord", "vbox"], [node2], options3);
        }, "htmlBuilder"),
        mathmlBuilder: /* @__PURE__ */ __name((group2, options3) => {
          var node2 = new mathMLTree.MathNode("mpadded", [buildGroup2(group2.body, options3)]);
          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: parser23
          } = _ref;
          var outerMode = parser23.mode;
          parser23.switchMode("math");
          var close2 = funcName === "\\(" ? "\\)" : "$";
          var body = parser23.parseExpression(false, close2);
          parser23.expect(close2);
          parser23.switchMode(outerMode);
          return {
            type: "styling",
            mode: parser23.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, options3) => {
        switch (options3.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: parser23
          } = _ref;
          return {
            type: "mathchoice",
            mode: parser23.mode,
            display: ordargument(args[0]),
            text: ordargument(args[1]),
            script: ordargument(args[2]),
            scriptscript: ordargument(args[3])
          };
        }, "handler"),
        htmlBuilder: /* @__PURE__ */ __name((group2, options3) => {
          var body = chooseMathStyle(group2, options3);
          var elements4 = buildExpression$1(body, options3, false);
          return buildCommon.makeFragment(elements4);
        }, "htmlBuilder"),
        mathmlBuilder: /* @__PURE__ */ __name((group2, options3) => {
          var body = chooseMathStyle(group2, options3);
          return buildExpressionRow(body, options3);
        }, "mathmlBuilder")
      });
      assembleSupSub = /* @__PURE__ */ __name((base, supGroup, subGroup, options3, style3, slant, baseShift) => {
        base = buildCommon.makeSpan([], [base]);
        var subIsSingleCharacter = subGroup && utils.isCharacterBox(subGroup);
        var sub2;
        var sup2;
        if (supGroup) {
          var elem = buildGroup$1(supGroup, options3.havingStyle(style3.sup()), options3);
          sup2 = {
            elem,
            kern: Math.max(options3.fontMetrics().bigOpSpacing1, options3.fontMetrics().bigOpSpacing3 - elem.depth)
          };
        }
        if (subGroup) {
          var _elem = buildGroup$1(subGroup, options3.havingStyle(style3.sub()), options3);
          sub2 = {
            elem: _elem,
            kern: Math.max(options3.fontMetrics().bigOpSpacing2, options3.fontMetrics().bigOpSpacing4 - _elem.height)
          };
        }
        var finalGroup;
        if (sup2 && sub2) {
          var bottom2 = options3.fontMetrics().bigOpSpacing5 + sub2.elem.height + sub2.elem.depth + sub2.kern + base.depth + baseShift;
          finalGroup = buildCommon.makeVList({
            positionType: "bottom",
            positionData: bottom2,
            children: [{
              type: "kern",
              size: options3.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: options3.fontMetrics().bigOpSpacing5
            }]
          }, options3);
        } else if (sub2) {
          var top2 = base.height - baseShift;
          finalGroup = buildCommon.makeVList({
            positionType: "top",
            positionData: top2,
            children: [{
              type: "kern",
              size: options3.fontMetrics().bigOpSpacing5
            }, {
              type: "elem",
              elem: sub2.elem,
              marginLeft: makeEm(-slant)
            }, {
              type: "kern",
              size: sub2.kern
            }, {
              type: "elem",
              elem: base
            }]
          }, options3);
        } else if (sup2) {
          var _bottom = base.depth + baseShift;
          finalGroup = buildCommon.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: options3.fontMetrics().bigOpSpacing5
            }]
          }, options3);
        } else {
          return base;
        }
        var parts = [finalGroup];
        if (sub2 && slant !== 0 && !subIsSingleCharacter) {
          var spacer = buildCommon.makeSpan(["mspace"], [], options3);
          spacer.style.marginRight = makeEm(slant);
          parts.unshift(spacer);
        }
        return buildCommon.makeSpan(["mop", "op-limits"], parts, options3);
      }, "assembleSupSub");
      noSuccessor = ["\\smallint"];
      htmlBuilder$2 = /* @__PURE__ */ __name((grp, options3) => {
        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 = options3.style;
        var large = false;
        if (style3.size === Style$1.DISPLAY.size && group2.symbol && !utils.contains(noSuccessor, 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 = buildCommon.makeSymbol(group2.name, fontName, "math", options3, ["mop", "op-symbol", large ? "large-op" : "small-op"]);
          if (stash.length > 0) {
            var italic = base.italic;
            var oval = buildCommon.staticSvg(stash + "Size" + (large ? "2" : "1"), options3);
            base = buildCommon.makeVList({
              positionType: "individualShift",
              children: [{
                type: "elem",
                elem: base,
                shift: 0
              }, {
                type: "elem",
                elem: oval,
                shift: large ? 0.08 : 0
              }]
            }, options3);
            group2.name = "\\" + stash;
            base.classes.unshift("mop");
            base.italic = italic;
          }
        } else if (group2.body) {
          var inner2 = buildExpression$1(group2.body, options3, true);
          if (inner2.length === 1 && inner2[0] instanceof SymbolNode) {
            base = inner2[0];
            base.classes[0] = "mop";
          } else {
            base = buildCommon.makeSpan(["mop"], inner2, options3);
          }
        } else {
          var output2 = [];
          for (var i2 = 1; i2 < group2.name.length; i2++) {
            output2.push(buildCommon.mathsym(group2.name[i2], group2.mode, options3));
          }
          base = buildCommon.makeSpan(["mop"], output2, options3);
        }
        var baseShift = 0;
        var slant = 0;
        if ((base instanceof SymbolNode || group2.name === "\\oiint" || group2.name === "\\oiiint") && !group2.suppressBaseShift) {
          baseShift = (base.height - base.depth) / 2 - options3.fontMetrics().axisHeight;
          slant = base.italic;
        }
        if (hasLimits) {
          return assembleSupSub(base, supGroup, subGroup, options3, style3, slant, baseShift);
        } else {
          if (baseShift) {
            base.style.position = "relative";
            base.style.top = makeEm(baseShift);
          }
          return base;
        }
      }, "htmlBuilder$2");
      mathmlBuilder$1 = /* @__PURE__ */ __name((group2, options3) => {
        var node2;
        if (group2.symbol) {
          node2 = new MathNode("mo", [makeText(group2.name, group2.mode)]);
          if (utils.contains(noSuccessor, group2.name)) {
            node2.setAttribute("largeop", "false");
          }
        } else if (group2.body) {
          node2 = new MathNode("mo", buildExpression2(group2.body, options3));
        } 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: parser23,
            funcName
          } = _ref;
          var fName = funcName;
          if (fName.length === 1) {
            fName = singleCharBigOps[fName];
          }
          return {
            type: "op",
            mode: parser23.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: parser23
          } = _ref2;
          var body = args[0];
          return {
            type: "op",
            mode: parser23.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: parser23,
            funcName
          } = _ref3;
          return {
            type: "op",
            mode: parser23.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: parser23,
            funcName
          } = _ref4;
          return {
            type: "op",
            mode: parser23.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
        },
        handler(_ref5) {
          var {
            parser: parser23,
            funcName
          } = _ref5;
          var fName = funcName;
          if (fName.length === 1) {
            fName = singleCharIntegrals[fName];
          }
          return {
            type: "op",
            mode: parser23.mode,
            limits: false,
            parentIsSupSub: false,
            symbol: true,
            name: fName
          };
        },
        htmlBuilder: htmlBuilder$2,
        mathmlBuilder: mathmlBuilder$1
      });
      htmlBuilder$1 = /* @__PURE__ */ __name((grp, options3) => {
        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 = child2.text;
            if (typeof childText === "string") {
              return {
                type: "textord",
                mode: child2.mode,
                text: childText
              };
            } else {
              return child2;
            }
          });
          var expression = buildExpression$1(body, options3.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 = buildCommon.makeSpan(["mop"], expression, options3);
        } else {
          base = buildCommon.makeSpan(["mop"], [], options3);
        }
        if (hasLimits) {
          return assembleSupSub(base, supGroup, subGroup, options3, options3.style, 0, 0);
        } else {
          return base;
        }
      }, "htmlBuilder$1");
      mathmlBuilder2 = /* @__PURE__ */ __name((group2, options3) => {
        var expression = buildExpression2(group2.body, options3.withFont("mathrm"));
        var isAllString = true;
        for (var i2 = 0; i2 < expression.length; i2++) {
          var node2 = expression[i2];
          if (node2 instanceof mathMLTree.SpaceNode) ;
          else if (node2 instanceof mathMLTree.MathNode) {
            switch (node2.type) {
              case "mi":
              case "mn":
              case "ms":
              case "mspace":
              case "mtext":
                break;
              case "mo": {
                var child = node2.children[0];
                if (node2.children.length === 1 && child instanceof mathMLTree.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 mathMLTree.TextNode(word)];
        }
        var identifier2 = new mathMLTree.MathNode("mi", expression);
        identifier2.setAttribute("mathvariant", "normal");
        var operator = new mathMLTree.MathNode("mo", [makeText("\u2061", "text")]);
        if (group2.parentIsSupSub) {
          return new mathMLTree.MathNode("mrow", [identifier2, operator]);
        } else {
          return mathMLTree.newDocumentFragment([identifier2, operator]);
        }
      }, "mathmlBuilder");
      defineFunction({
        type: "operatorname",
        names: ["\\operatorname@", "\\operatornamewithlimits"],
        props: {
          numArgs: 1
        },
        handler: /* @__PURE__ */ __name((_ref, args) => {
          var {
            parser: parser23,
            funcName
          } = _ref;
          var body = args[0];
          return {
            type: "operatorname",
            mode: parser23.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, options3) {
          if (group2.semisimple) {
            return buildCommon.makeFragment(buildExpression$1(group2.body, options3, false));
          }
          return buildCommon.makeSpan(["mord"], buildExpression$1(group2.body, options3, true), options3);
        },
        mathmlBuilder(group2, options3) {
          return buildExpressionRow(group2.body, options3, true);
        }
      });
      defineFunction({
        type: "overline",
        names: ["\\overline"],
        props: {
          numArgs: 1
        },
        handler(_ref, args) {
          var {
            parser: parser23
          } = _ref;
          var body = args[0];
          return {
            type: "overline",
            mode: parser23.mode,
            body
          };
        },
        htmlBuilder(group2, options3) {
          var innerGroup = buildGroup$1(group2.body, options3.havingCrampedStyle());
          var line2 = buildCommon.makeLineSpan("overline-line", options3);
          var defaultRuleThickness = options3.fontMetrics().defaultRuleThickness;
          var vlist = buildCommon.makeVList({
            positionType: "firstBaseline",
            children: [{
              type: "elem",
              elem: innerGroup
            }, {
              type: "kern",
              size: 3 * defaultRuleThickness
            }, {
              type: "elem",
              elem: line2
            }, {
              type: "kern",
              size: defaultRuleThickness
            }]
          }, options3);
          return buildCommon.makeSpan(["mord", "overline"], [vlist], options3);
        },
        mathmlBuilder(group2, options3) {
          var operator = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode("\u203E")]);
          operator.setAttribute("stretchy", "true");
          var node2 = new mathMLTree.MathNode("mover", [buildGroup2(group2.body, options3), operator]);
          node2.setAttribute("accent", "true");
          return node2;
        }
      });
      defineFunction({
        type: "phantom",
        names: ["\\phantom"],
        props: {
          numArgs: 1,
          allowedInText: true
        },
        handler: /* @__PURE__ */ __name((_ref, args) => {
          var {
            parser: parser23
          } = _ref;
          var body = args[0];
          return {
            type: "phantom",
            mode: parser23.mode,
            body: ordargument(body)
          };
        }, "handler"),
        htmlBuilder: /* @__PURE__ */ __name((group2, options3) => {
          var elements4 = buildExpression$1(group2.body, options3.withPhantom(), false);
          return buildCommon.makeFragment(elements4);
        }, "htmlBuilder"),
        mathmlBuilder: /* @__PURE__ */ __name((group2, options3) => {
          var inner2 = buildExpression2(group2.body, options3);
          return new mathMLTree.MathNode("mphantom", inner2);
        }, "mathmlBuilder")
      });
      defineFunction({
        type: "hphantom",
        names: ["\\hphantom"],
        props: {
          numArgs: 1,
          allowedInText: true
        },
        handler: /* @__PURE__ */ __name((_ref2, args) => {
          var {
            parser: parser23
          } = _ref2;
          var body = args[0];
          return {
            type: "hphantom",
            mode: parser23.mode,
            body
          };
        }, "handler"),
        htmlBuilder: /* @__PURE__ */ __name((group2, options3) => {
          var node2 = buildCommon.makeSpan([], [buildGroup$1(group2.body, options3.withPhantom())]);
          node2.height = 0;
          node2.depth = 0;
          if (node2.children) {
            for (var i2 = 0; i2 < node2.children.length; i2++) {
              node2.children[i2].height = 0;
              node2.children[i2].depth = 0;
            }
          }
          node2 = buildCommon.makeVList({
            positionType: "firstBaseline",
            children: [{
              type: "elem",
              elem: node2
            }]
          }, options3);
          return buildCommon.makeSpan(["mord"], [node2], options3);
        }, "htmlBuilder"),
        mathmlBuilder: /* @__PURE__ */ __name((group2, options3) => {
          var inner2 = buildExpression2(ordargument(group2.body), options3);
          var phantom = new mathMLTree.MathNode("mphantom", inner2);
          var node2 = new mathMLTree.MathNode("mpadded", [phantom]);
          node2.setAttribute("height", "0px");
          node2.setAttribute("depth", "0px");
          return node2;
        }, "mathmlBuilder")
      });
      defineFunction({
        type: "vphantom",
        names: ["\\vphantom"],
        props: {
          numArgs: 1,
          allowedInText: true
        },
        handler: /* @__PURE__ */ __name((_ref3, args) => {
          var {
            parser: parser23
          } = _ref3;
          var body = args[0];
          return {
            type: "vphantom",
            mode: parser23.mode,
            body
          };
        }, "handler"),
        htmlBuilder: /* @__PURE__ */ __name((group2, options3) => {
          var inner2 = buildCommon.makeSpan(["inner"], [buildGroup$1(group2.body, options3.withPhantom())]);
          var fix = buildCommon.makeSpan(["fix"], []);
          return buildCommon.makeSpan(["mord", "rlap"], [inner2, fix], options3);
        }, "htmlBuilder"),
        mathmlBuilder: /* @__PURE__ */ __name((group2, options3) => {
          var inner2 = buildExpression2(ordargument(group2.body), options3);
          var phantom = new mathMLTree.MathNode("mphantom", inner2);
          var node2 = new mathMLTree.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: parser23
          } = _ref;
          var amount = assertNodeType(args[0], "size").value;
          var body = args[1];
          return {
            type: "raisebox",
            mode: parser23.mode,
            dy: amount,
            body
          };
        },
        htmlBuilder(group2, options3) {
          var body = buildGroup$1(group2.body, options3);
          var dy = calculateSize2(group2.dy, options3);
          return buildCommon.makeVList({
            positionType: "shift",
            positionData: -dy,
            children: [{
              type: "elem",
              elem: body
            }]
          }, options3);
        },
        mathmlBuilder(group2, options3) {
          var node2 = new mathMLTree.MathNode("mpadded", [buildGroup2(group2.body, options3)]);
          var dy = group2.dy.number + group2.dy.unit;
          node2.setAttribute("voffset", dy);
          return node2;
        }
      });
      defineFunction({
        type: "internal",
        names: ["\\relax"],
        props: {
          numArgs: 0,
          allowedInText: true
        },
        handler(_ref) {
          var {
            parser: parser23
          } = _ref;
          return {
            type: "internal",
            mode: parser23.mode
          };
        }
      });
      defineFunction({
        type: "rule",
        names: ["\\rule"],
        props: {
          numArgs: 2,
          numOptionalArgs: 1,
          argTypes: ["size", "size", "size"]
        },
        handler(_ref, args, optArgs) {
          var {
            parser: parser23
          } = _ref;
          var shift2 = optArgs[0];
          var width3 = assertNodeType(args[0], "size");
          var height2 = assertNodeType(args[1], "size");
          return {
            type: "rule",
            mode: parser23.mode,
            shift: shift2 && assertNodeType(shift2, "size").value,
            width: width3.value,
            height: height2.value
          };
        },
        htmlBuilder(group2, options3) {
          var rule = buildCommon.makeSpan(["mord", "rule"], [], options3);
          var width3 = calculateSize2(group2.width, options3);
          var height2 = calculateSize2(group2.height, options3);
          var shift2 = group2.shift ? calculateSize2(group2.shift, options3) : 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 * options3.sizeMultiplier;
          return rule;
        },
        mathmlBuilder(group2, options3) {
          var width3 = calculateSize2(group2.width, options3);
          var height2 = calculateSize2(group2.height, options3);
          var shift2 = group2.shift ? calculateSize2(group2.shift, options3) : 0;
          var color2 = options3.color && options3.getColor() || "black";
          var rule = new mathMLTree.MathNode("mspace");
          rule.setAttribute("mathbackground", color2);
          rule.setAttribute("width", makeEm(width3));
          rule.setAttribute("height", makeEm(height2));
          var wrapper = new mathMLTree.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, options3) => {
        var newOptions = options3.havingSize(group2.size);
        return sizingGroup(group2.body, newOptions, options3);
      }, "htmlBuilder");
      defineFunction({
        type: "sizing",
        names: sizeFuncs,
        props: {
          numArgs: 0,
          allowedInText: true
        },
        handler: /* @__PURE__ */ __name((_ref, args) => {
          var {
            breakOnTokenText,
            funcName,
            parser: parser23
          } = _ref;
          var body = parser23.parseExpression(false, breakOnTokenText);
          return {
            type: "sizing",
            mode: parser23.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, options3) => {
          var newOptions = options3.havingSize(group2.size);
          var inner2 = buildExpression2(group2.body, newOptions);
          var node2 = new mathMLTree.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: parser23
          } = _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 = 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: parser23.mode,
            body,
            smashHeight,
            smashDepth
          };
        }, "handler"),
        htmlBuilder: /* @__PURE__ */ __name((group2, options3) => {
          var node2 = buildCommon.makeSpan([], [buildGroup$1(group2.body, options3)]);
          if (!group2.smashHeight && !group2.smashDepth) {
            return node2;
          }
          if (group2.smashHeight) {
            node2.height = 0;
            if (node2.children) {
              for (var i2 = 0; i2 < node2.children.length; i2++) {
                node2.children[i2].height = 0;
              }
            }
          }
          if (group2.smashDepth) {
            node2.depth = 0;
            if (node2.children) {
              for (var _i = 0; _i < node2.children.length; _i++) {
                node2.children[_i].depth = 0;
              }
            }
          }
          var smashedNode = buildCommon.makeVList({
            positionType: "firstBaseline",
            children: [{
              type: "elem",
              elem: node2
            }]
          }, options3);
          return buildCommon.makeSpan(["mord"], [smashedNode], options3);
        }, "htmlBuilder"),
        mathmlBuilder: /* @__PURE__ */ __name((group2, options3) => {
          var node2 = new mathMLTree.MathNode("mpadded", [buildGroup2(group2.body, options3)]);
          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: parser23
          } = _ref;
          var index = optArgs[0];
          var body = args[0];
          return {
            type: "sqrt",
            mode: parser23.mode,
            body,
            index
          };
        },
        htmlBuilder(group2, options3) {
          var inner2 = buildGroup$1(group2.body, options3.havingCrampedStyle());
          if (inner2.height === 0) {
            inner2.height = options3.fontMetrics().xHeight;
          }
          inner2 = buildCommon.wrapFragment(inner2, options3);
          var metrics = options3.fontMetrics();
          var theta = metrics.defaultRuleThickness;
          var phi = theta;
          if (options3.style.id < Style$1.TEXT.id) {
            phi = options3.fontMetrics().xHeight;
          }
          var lineClearance = theta + phi / 4;
          var minDelimiterHeight = inner2.height + inner2.depth + lineClearance + theta;
          var {
            span: img,
            ruleWidth,
            advanceWidth
          } = delimiter.sqrtImage(minDelimiterHeight, options3);
          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 = buildCommon.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
            }]
          }, options3);
          if (!group2.index) {
            return buildCommon.makeSpan(["mord", "sqrt"], [body], options3);
          } else {
            var newOptions = options3.havingStyle(Style$1.SCRIPTSCRIPT);
            var rootm = buildGroup$1(group2.index, newOptions, options3);
            var toShift = 0.6 * (body.height - body.depth);
            var rootVList = buildCommon.makeVList({
              positionType: "shift",
              positionData: -toShift,
              children: [{
                type: "elem",
                elem: rootm
              }]
            }, options3);
            var rootVListWrap = buildCommon.makeSpan(["root"], [rootVList]);
            return buildCommon.makeSpan(["mord", "sqrt"], [rootVListWrap, body], options3);
          }
        },
        mathmlBuilder(group2, options3) {
          var {
            body,
            index
          } = group2;
          return index ? new mathMLTree.MathNode("mroot", [buildGroup2(body, options3), buildGroup2(index, options3)]) : new mathMLTree.MathNode("msqrt", [buildGroup2(body, options3)]);
        }
      });
      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: parser23
          } = _ref;
          var body = parser23.parseExpression(true, breakOnTokenText);
          var style3 = funcName.slice(1, funcName.length - 5);
          return {
            type: "styling",
            mode: parser23.mode,
            // Figure out what style to use by pulling out the style from
            // the function name
            style: style3,
            body
          };
        },
        htmlBuilder(group2, options3) {
          var newStyle = styleMap[group2.style];
          var newOptions = options3.havingStyle(newStyle).withFont("");
          return sizingGroup(group2.body, newOptions, options3);
        },
        mathmlBuilder(group2, options3) {
          var newStyle = styleMap[group2.style];
          var newOptions = options3.havingStyle(newStyle);
          var inner2 = buildExpression2(group2.body, newOptions);
          var node2 = new mathMLTree.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, options3) {
        var base = group2.base;
        if (!base) {
          return null;
        } else if (base.type === "op") {
          var delegate = base.limits && (options3.style.size === Style$1.DISPLAY.size || base.alwaysHandleSupSub);
          return delegate ? htmlBuilder$2 : null;
        } else if (base.type === "operatorname") {
          var _delegate = base.alwaysHandleSupSub && (options3.style.size === Style$1.DISPLAY.size || base.limits);
          return _delegate ? htmlBuilder$1 : null;
        } else if (base.type === "accent") {
          return utils.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, options3) {
          var builderDelegate = htmlBuilderDelegate(group2, options3);
          if (builderDelegate) {
            return builderDelegate(group2, options3);
          }
          var {
            base: valueBase,
            sup: valueSup,
            sub: valueSub
          } = group2;
          var base = buildGroup$1(valueBase, options3);
          var supm;
          var subm;
          var metrics = options3.fontMetrics();
          var supShift = 0;
          var subShift = 0;
          var isCharacterBox3 = valueBase && utils.isCharacterBox(valueBase);
          if (valueSup) {
            var newOptions = options3.havingStyle(options3.style.sup());
            supm = buildGroup$1(valueSup, newOptions, options3);
            if (!isCharacterBox3) {
              supShift = base.height - newOptions.fontMetrics().supDrop * newOptions.sizeMultiplier / options3.sizeMultiplier;
            }
          }
          if (valueSub) {
            var _newOptions = options3.havingStyle(options3.style.sub());
            subm = buildGroup$1(valueSub, _newOptions, options3);
            if (!isCharacterBox3) {
              subShift = base.depth + _newOptions.fontMetrics().subDrop * _newOptions.sizeMultiplier / options3.sizeMultiplier;
            }
          }
          var minSupShift;
          if (options3.style === Style$1.DISPLAY) {
            minSupShift = metrics.sup1;
          } else if (options3.style.cramped) {
            minSupShift = metrics.sup3;
          } else {
            minSupShift = metrics.sup2;
          }
          var multiplier = options3.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 maxWidth = 4 * ruleWidth;
            if (supShift - supm.depth - (subm.height - subShift) < maxWidth) {
              subShift = maxWidth - (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 = buildCommon.makeVList({
              positionType: "individualShift",
              children: vlistElem
            }, options3);
          } else if (subm) {
            subShift = Math.max(subShift, metrics.sub1, subm.height - 0.8 * metrics.xHeight);
            var _vlistElem = [{
              type: "elem",
              elem: subm,
              marginLeft,
              marginRight
            }];
            supsub = buildCommon.makeVList({
              positionType: "shift",
              positionData: subShift,
              children: _vlistElem
            }, options3);
          } else if (supm) {
            supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight);
            supsub = buildCommon.makeVList({
              positionType: "shift",
              positionData: -supShift,
              children: [{
                type: "elem",
                elem: supm,
                marginRight
              }]
            }, options3);
          } else {
            throw new Error("supsub must have either sup or sub.");
          }
          var mclass = getTypeOfDomTree(base, "right") || "mord";
          return buildCommon.makeSpan([mclass], [base, buildCommon.makeSpan(["msupsub"], [supsub])], options3);
        },
        mathmlBuilder(group2, options3) {
          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, options3)];
          if (group2.sub) {
            children2.push(buildGroup2(group2.sub, options3));
          }
          if (group2.sup) {
            children2.push(buildGroup2(group2.sup, options3));
          }
          var nodeType3;
          if (isBrace) {
            nodeType3 = isOver ? "mover" : "munder";
          } else if (!group2.sub) {
            var base = group2.base;
            if (base && base.type === "op" && base.limits && (options3.style === Style$1.DISPLAY || base.alwaysHandleSupSub)) {
              nodeType3 = "mover";
            } else if (base && base.type === "operatorname" && base.alwaysHandleSupSub && (base.limits || options3.style === Style$1.DISPLAY)) {
              nodeType3 = "mover";
            } else {
              nodeType3 = "msup";
            }
          } else if (!group2.sup) {
            var _base = group2.base;
            if (_base && _base.type === "op" && _base.limits && (options3.style === Style$1.DISPLAY || _base.alwaysHandleSupSub)) {
              nodeType3 = "munder";
            } else if (_base && _base.type === "operatorname" && _base.alwaysHandleSupSub && (_base.limits || options3.style === Style$1.DISPLAY)) {
              nodeType3 = "munder";
            } else {
              nodeType3 = "msub";
            }
          } else {
            var _base2 = group2.base;
            if (_base2 && _base2.type === "op" && _base2.limits && options3.style === Style$1.DISPLAY) {
              nodeType3 = "munderover";
            } else if (_base2 && _base2.type === "operatorname" && _base2.alwaysHandleSupSub && (options3.style === Style$1.DISPLAY || _base2.limits)) {
              nodeType3 = "munderover";
            } else {
              nodeType3 = "msubsup";
            }
          }
          return new mathMLTree.MathNode(nodeType3, children2);
        }
      });
      defineFunctionBuilders({
        type: "atom",
        htmlBuilder(group2, options3) {
          return buildCommon.mathsym(group2.text, group2.mode, options3, ["m" + group2.family]);
        },
        mathmlBuilder(group2, options3) {
          var node2 = new mathMLTree.MathNode("mo", [makeText(group2.text, group2.mode)]);
          if (group2.family === "bin") {
            var variant = getVariant(group2, options3);
            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, options3) {
          return buildCommon.makeOrd(group2, options3, "mathord");
        },
        mathmlBuilder(group2, options3) {
          var node2 = new mathMLTree.MathNode("mi", [makeText(group2.text, group2.mode, options3)]);
          var variant = getVariant(group2, options3) || "italic";
          if (variant !== defaultVariant[node2.type]) {
            node2.setAttribute("mathvariant", variant);
          }
          return node2;
        }
      });
      defineFunctionBuilders({
        type: "textord",
        htmlBuilder(group2, options3) {
          return buildCommon.makeOrd(group2, options3, "textord");
        },
        mathmlBuilder(group2, options3) {
          var text3 = makeText(group2.text, group2.mode, options3);
          var variant = getVariant(group2, options3) || "normal";
          var node2;
          if (group2.mode === "text") {
            node2 = new mathMLTree.MathNode("mtext", [text3]);
          } else if (/[0-9]/.test(group2.text)) {
            node2 = new mathMLTree.MathNode("mn", [text3]);
          } else if (group2.text === "\\prime") {
            node2 = new mathMLTree.MathNode("mo", [text3]);
          } else {
            node2 = new mathMLTree.MathNode("mi", [text3]);
          }
          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, options3) {
          if (regularSpace.hasOwnProperty(group2.text)) {
            var className = regularSpace[group2.text].className || "";
            if (group2.mode === "text") {
              var ord = buildCommon.makeOrd(group2, options3, "textord");
              ord.classes.push(className);
              return ord;
            } else {
              return buildCommon.makeSpan(["mspace", className], [buildCommon.mathsym(group2.text, group2.mode, options3)], options3);
            }
          } else if (cssSpace.hasOwnProperty(group2.text)) {
            return buildCommon.makeSpan(["mspace", cssSpace[group2.text]], [], options3);
          } else {
            throw new ParseError('Unknown type of space "' + group2.text + '"');
          }
        },
        mathmlBuilder(group2, options3) {
          var node2;
          if (regularSpace.hasOwnProperty(group2.text)) {
            node2 = new mathMLTree.MathNode("mtext", [new mathMLTree.TextNode("\xA0")]);
          } else if (cssSpace.hasOwnProperty(group2.text)) {
            return new mathMLTree.MathNode("mspace");
          } else {
            throw new ParseError('Unknown type of space "' + group2.text + '"');
          }
          return node2;
        }
      });
      pad = /* @__PURE__ */ __name(() => {
        var padNode = new mathMLTree.MathNode("mtd", []);
        padNode.setAttribute("width", "50%");
        return padNode;
      }, "pad");
      defineFunctionBuilders({
        type: "tag",
        mathmlBuilder(group2, options3) {
          var table = new mathMLTree.MathNode("mtable", [new mathMLTree.MathNode("mtr", [pad(), new mathMLTree.MathNode("mtd", [buildExpressionRow(group2.body, options3)]), pad(), new mathMLTree.MathNode("mtd", [buildExpressionRow(group2.tag, options3)])])]);
          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, options3) => {
        var font = group2.font;
        if (!font) {
          return options3;
        } else if (textFontFamilies[font]) {
          return options3.withTextFontFamily(textFontFamilies[font]);
        } else if (textFontWeights[font]) {
          return options3.withTextFontWeight(textFontWeights[font]);
        } else if (font === "\\emph") {
          return options3.fontShape === "textit" ? options3.withTextFontShape("textup") : options3.withTextFontShape("textit");
        }
        return options3.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: parser23,
            funcName
          } = _ref;
          var body = args[0];
          return {
            type: "text",
            mode: parser23.mode,
            body: ordargument(body),
            font: funcName
          };
        },
        htmlBuilder(group2, options3) {
          var newOptions = optionsWithFont(group2, options3);
          var inner2 = buildExpression$1(group2.body, newOptions, true);
          return buildCommon.makeSpan(["mord", "text"], inner2, newOptions);
        },
        mathmlBuilder(group2, options3) {
          var newOptions = optionsWithFont(group2, options3);
          return buildExpressionRow(group2.body, newOptions);
        }
      });
      defineFunction({
        type: "underline",
        names: ["\\underline"],
        props: {
          numArgs: 1,
          allowedInText: true
        },
        handler(_ref, args) {
          var {
            parser: parser23
          } = _ref;
          return {
            type: "underline",
            mode: parser23.mode,
            body: args[0]
          };
        },
        htmlBuilder(group2, options3) {
          var innerGroup = buildGroup$1(group2.body, options3);
          var line2 = buildCommon.makeLineSpan("underline-line", options3);
          var defaultRuleThickness = options3.fontMetrics().defaultRuleThickness;
          var vlist = buildCommon.makeVList({
            positionType: "top",
            positionData: innerGroup.height,
            children: [{
              type: "kern",
              size: defaultRuleThickness
            }, {
              type: "elem",
              elem: line2
            }, {
              type: "kern",
              size: 3 * defaultRuleThickness
            }, {
              type: "elem",
              elem: innerGroup
            }]
          }, options3);
          return buildCommon.makeSpan(["mord", "underline"], [vlist], options3);
        },
        mathmlBuilder(group2, options3) {
          var operator = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode("\u203E")]);
          operator.setAttribute("stretchy", "true");
          var node2 = new mathMLTree.MathNode("munder", [buildGroup2(group2.body, options3), 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: parser23
          } = _ref;
          return {
            type: "vcenter",
            mode: parser23.mode,
            body: args[0]
          };
        },
        htmlBuilder(group2, options3) {
          var body = buildGroup$1(group2.body, options3);
          var axisHeight = options3.fontMetrics().axisHeight;
          var dy = 0.5 * (body.height - axisHeight - (body.depth + axisHeight));
          return buildCommon.makeVList({
            positionType: "shift",
            positionData: dy,
            children: [{
              type: "elem",
              elem: body
            }]
          }, options3);
        },
        mathmlBuilder(group2, options3) {
          return new mathMLTree.MathNode("mpadded", [buildGroup2(group2.body, options3)], ["vcenter"]);
        }
      });
      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, options3) {
          var text3 = makeVerb(group2);
          var body = [];
          var newOptions = options3.havingStyle(options3.style.text());
          for (var i2 = 0; i2 < text3.length; i2++) {
            var c3 = text3[i2];
            if (c3 === "~") {
              c3 = "\\textasciitilde";
            }
            body.push(buildCommon.makeSymbol(c3, "Typewriter-Regular", group2.mode, newOptions, ["mord", "texttt"]));
          }
          return buildCommon.makeSpan(["mord", "text"].concat(newOptions.sizingClasses(options3)), buildCommon.tryCombineChars(body), newOptions);
        },
        mathmlBuilder(group2, options3) {
          var text3 = new mathMLTree.TextNode(makeVerb(group2));
          var node2 = new mathMLTree.MathNode("mtext", [text3]);
          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 = void 0;
          this.settings = void 0;
          this.tokenRegex = void 0;
          this.catcodes = void 0;
          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 match2 = this.tokenRegex.exec(input);
          if (match2 === null || match2.index !== pos) {
            throw new ParseError("Unexpected character: '" + input[pos] + "'", new Token(input[pos], new SourceLocation(this, pos, pos + 1)));
          }
          var text3 = match2[6] || match2[3] || (match2[2] ? "\\ " : " ");
          if (this.catcodes[text3] === 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(text3, 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 = void 0;
          this.builtins = void 0;
          this.undefStack = void 0;
          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 = "";
        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) => {
        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 exists2 = context.isDefined(name);
        if (exists2 && !existsOK) {
          throw new ParseError("\\newcommand{" + name + "} attempting to redefine " + (name + "; use \\renewcommand"));
        }
        if (!exists2 && !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;
        }
        context.macros.set(name, {
          tokens: arg,
          numArgs
        });
        return "";
      }, "newcommand");
      defineMacro("\\newcommand", (context) => newcommand(context, false, true));
      defineMacro("\\renewcommand", (context) => newcommand(context, true, false));
      defineMacro("\\providecommand", (context) => newcommand(context, 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("\xB7", "\\cdotp");
      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}}{\\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("\uFE0F", "\\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", "\\mathord{\\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\\;");
      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"
      };
      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 (utils.contains(["bin", "rel"], 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 = void 0;
          this.expansionCount = void 0;
          this.lexer = void 0;
          this.macros = void 0;
          this.stack = void 0;
          this.mode = void 0;
          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 start3.range(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 match2 = 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[match2] : "}") + "'", tok);
            }
            if (delims && isDelimited) {
              if ((depth === 0 || depth === 1 && delims[match2] === "{") && tok.text === delims[match2]) {
                ++match2;
                if (match2 === delims.length) {
                  tokens2.splice(-match2, match2);
                  break;
                }
              } else {
                match2 = 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;
            }
          }
          throw new Error();
        }
        /**
         * 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.indexOf("#") !== -1) {
              var stripped = expansion.replace(/##/g, "");
              while (stripped.indexOf("#" + (numArgs + 1)) !== -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 = void 0;
          this.gullet = void 0;
          this.settings = void 0;
          this.leftrightDepth = void 0;
          this.nextToken = void 0;
          this.mode = "math";
          this.gullet = new MacroExpander(input, settings, this.mode);
          this.settings = settings;
          this.leftrightDepth = 0;
        }
        /**
         * Checks a result to make sure it has the right type, and throws an
         * appropriate error otherwise.
         */
        expect(text3, consume) {
          if (consume === void 0) {
            consume = true;
          }
          if (this.fetch().text !== text3) {
            throw new ParseError("Expected '" + text3 + "', 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 parse8 = this.parseExpression(false);
            this.expect("EOF");
            if (!this.settings.globalGroup) {
              this.gullet.endGroup();
            }
            return parse8;
          } 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 parse8 = this.parseExpression(false);
          this.expect("}");
          this.nextToken = oldToken;
          return parse8;
        }
        /**
         * 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 han 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 lex2 = this.fetch();
            if (_Parser2.endOfExpression.indexOf(lex2.text) !== -1) {
              break;
            }
            if (breakOnTokenText && lex2.text === breakOnTokenText) {
              break;
            }
            if (breakOnInfix && functions[lex2.text] && functions[lex2.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++) {
            if (body[i2].type === "infix") {
              if (overIndex !== -1) {
                throw new ParseError("only one infix operator per group", body[i2].token);
              }
              overIndex = i2;
              funcName = body[i2].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 node2;
            if (funcName === "\\\\abovefrac") {
              node2 = this.callFunction(funcName, [numerNode, body[overIndex], denomNode], []);
            } else {
              node2 = this.callFunction(funcName, [numerNode, denomNode], []);
            }
            return [node2];
          } 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 = this.parseGroup(name);
          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(text3) {
          var textordArray = [];
          for (var i2 = 0; i2 < text3.length; i2++) {
            textordArray.push({
              type: "textord",
              mode: "text",
              text: text3[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 (this.mode === "text") {
            return base;
          }
          var superscript;
          var subscript;
          while (true) {
            this.consumeSpaces();
            var lex2 = this.fetch();
            if (lex2.text === "\\limits" || lex2.text === "\\nolimits") {
              if (base && base.type === "op") {
                var limits = lex2.text === "\\limits";
                base.limits = limits;
                base.alwaysHandleSupSub = true;
              } else if (base && base.type === "operatorname") {
                if (base.alwaysHandleSupSub) {
                  base.limits = lex2.text === "\\limits";
                }
              } else {
                throw new ParseError("Limit controls must follow a math operator", lex2);
              }
              this.consume();
            } else if (lex2.text === "^") {
              if (superscript) {
                throw new ParseError("Double superscript", lex2);
              }
              superscript = this.handleSupSubscript("superscript");
            } else if (lex2.text === "_") {
              if (subscript) {
                throw new ParseError("Double subscript", lex2);
              }
              subscript = this.handleSupSubscript("subscript");
            } else if (lex2.text === "'") {
              if (superscript) {
                throw new ParseError("Double superscript", lex2);
              }
              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[lex2.text]) {
              var isSub = unicodeSubRegEx.test(lex2.text);
              var subsupTokens = [];
              subsupTokens.push(new Token(uSubsAndSups[lex2.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 (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 _group = this.parseGroup(name);
              if (_group == null) {
                throw new ParseError("Expected group as " + name, this.fetch());
              }
              return _group;
            }
            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 match2 = /^(#[a-f0-9]{3}|#?[a-f0-9]{6}|[a-z]+)$/i.exec(res.text);
          if (!match2) {
            throw new ParseError("Invalid color: '" + res.text + "'", res);
          }
          var color2 = match2[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 match2 = /([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(res.text);
          if (!match2) {
            throw new ParseError("Invalid size: '" + res.text + "'", res);
          }
          var data5 = {
            number: +(match2[1] + match2[2]),
            // sign + magnitude, cast to number
            unit: match2[3]
          };
          if (!validUnit(data5)) {
            throw new ParseError("Invalid unit: '" + data5.unit + "'", res);
          }
          return {
            type: "size",
            mode: this.mode,
            value: data5,
            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 text3 = firstToken.text;
          var result;
          if (text3 === "{" || text3 === "\\begingroup") {
            this.consume();
            var groupEnd = text3 === "{" ? "}" : "\\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: text3 === "\\begingroup" || void 0
            };
          } else {
            result = this.parseFunction(breakOnTokenText, name) || this.parseSymbol();
            if (result == null && text3[0] === "\\" && !implicitCommands.hasOwnProperty(text3)) {
              if (this.settings.throwOnError) {
                throw new ParseError("Undefined control sequence: " + text3, firstToken);
              }
              result = this.formatUnsupportedCmd(text3);
              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];
            var v3 = a2.text;
            if (v3 === "-" && group2[i2 + 1].text === "-") {
              if (i2 + 1 < n2 && group2[i2 + 2].text === "-") {
                group2.splice(i2, 3, {
                  type: "textord",
                  mode: "text",
                  loc: SourceLocation.range(a2, group2[i2 + 2]),
                  text: "---"
                });
                n2 -= 2;
              } else {
                group2.splice(i2, 2, {
                  type: "textord",
                  mode: "text",
                  loc: SourceLocation.range(a2, group2[i2 + 1]),
                  text: "--"
                });
                n2 -= 1;
              }
            }
            if ((v3 === "'" || v3 === "`") && group2[i2 + 1].text === v3) {
              group2.splice(i2, 2, {
                type: "textord",
                mode: "text",
                loc: SourceLocation.range(a2, group2[i2 + 1]),
                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 text3 = nucleus.text;
          if (/^\\verb[^a-zA-Z]/.test(text3)) {
            this.consume();
            var arg = text3.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(text3[0]) && !symbols[this.mode][text3[0]]) {
            if (this.settings.strict && this.mode === "math") {
              this.settings.reportNonstrict("unicodeTextInMathMode", 'Accented Unicode text character "' + text3[0] + '" used in math mode', nucleus);
            }
            text3 = unicodeSymbols[text3[0]] + text3.slice(1);
          }
          var match2 = combiningDiacriticalMarksEndRegex.exec(text3);
          if (match2) {
            text3 = text3.substring(0, match2.index);
            if (text3 === "i") {
              text3 = "\u0131";
            } else if (text3 === "j") {
              text3 = "\u0237";
            }
          }
          var symbol;
          if (symbols[this.mode][text3]) {
            if (this.settings.strict && this.mode === "math" && extraLatin.indexOf(text3) >= 0) {
              this.settings.reportNonstrict("unicodeTextInMathMode", 'Latin-1/Unicode text character "' + text3[0] + '" used in math mode', nucleus);
            }
            var group2 = symbols[this.mode][text3].group;
            var loc = SourceLocation.range(nucleus);
            var s2;
            if (ATOMS.hasOwnProperty(group2)) {
              var family = group2;
              s2 = {
                type: "atom",
                mode: this.mode,
                family,
                loc,
                text: text3
              };
            } else {
              s2 = {
                type: group2,
                mode: this.mode,
                loc,
                text: text3
              };
            }
            symbol = s2;
          } else if (text3.charCodeAt(0) >= 128) {
            if (this.settings.strict) {
              if (!supportedCodepoint(text3.charCodeAt(0))) {
                this.settings.reportNonstrict("unknownSymbol", 'Unrecognized Unicode character "' + text3[0] + '"' + (" (" + text3.charCodeAt(0) + ")"), nucleus);
              } else if (this.mode === "math") {
                this.settings.reportNonstrict("unicodeTextInMathMode", 'Unicode text character "' + text3[0] + '" used in math mode', nucleus);
              }
            }
            symbol = {
              type: "textord",
              mode: "text",
              loc: SourceLocation.range(nucleus),
              text: text3
            };
          } else {
            return null;
          }
          this.consume();
          if (match2) {
            for (var i2 = 0; i2 < match2[0].length; i2++) {
              var accent2 = match2[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,
                // $FlowFixMe
                base: symbol
              };
            }
          }
          return symbol;
        }
      };
      Parser.endOfExpression = ["}", "\\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 parser23 = new Parser(toParse, settings);
        delete parser23.gullet.macros.current["\\df@tag"];
        var tree = parser23.parse();
        delete parser23.gullet.macros.current["\\current@color"];
        delete parser23.gullet.macros.current["\\color"];
        if (parser23.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: parser23.subparse([new Token("\\df@tag")])
          }];
        }
        return tree;
      }, "parseTree");
      render = /* @__PURE__ */ __name(function render2(expression, baseNode, options3) {
        baseNode.textContent = "";
        var node2 = renderToDomTree(expression, options3).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 render7() {
            throw new ParseError("KaTeX doesn't work in quirks mode.");
          }, "render");
        }
      }
      renderToString = /* @__PURE__ */ __name(function renderToString2(expression, options3) {
        var markup = renderToDomTree(expression, options3).toMarkup();
        return markup;
      }, "renderToString");
      generateParseTree = /* @__PURE__ */ __name(function generateParseTree2(expression, options3) {
        var settings = new Settings(options3);
        return parseTree(expression, settings);
      }, "generateParseTree");
      renderError = /* @__PURE__ */ __name(function renderError2(error3, expression, options3) {
        if (options3.throwOnError || !(error3 instanceof ParseError)) {
          throw error3;
        }
        var node2 = buildCommon.makeSpan(["katex-error"], [new SymbolNode(expression)]);
        node2.setAttribute("title", error3.toString());
        node2.setAttribute("style", "color:" + options3.errorColor);
        return node2;
      }, "renderError");
      renderToDomTree = /* @__PURE__ */ __name(function renderToDomTree2(expression, options3) {
        var settings = new Settings(options3);
        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, options3) {
        var settings = new Settings(options3);
        try {
          var tree = parseTree(expression, settings);
          return buildHTMLTree(tree, expression, settings);
        } catch (error3) {
          return renderError(error3, expression, settings);
        }
      }, "renderToHTMLTree");
      katex = {
        /**
         * Current KaTeX version
         */
        version: "0.16.11",
        /**
         * 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 shema 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: 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.
         */
        __domTree: {
          Span,
          Anchor,
          SymbolNode,
          SvgNode,
          PathNode,
          LineNode
        }
      };
    }
  });

  // src/diagrams/common/common.ts
  function setupDompurifyHooks() {
    const TEMPORARY_ATTRIBUTE = "data-temp-href-target";
    import_dompurify.default.addHook("beforeSanitizeAttributes", (node2) => {
      if (node2.tagName === "A" && node2.hasAttribute("target")) {
        node2.setAttribute(TEMPORARY_ATTRIBUTE, node2.getAttribute("target") ?? "");
      }
    });
    import_dompurify.default.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 import_dompurify, lineBreakRegex, getRows, setupDompurifyHooksIfNotSetup, removeScript, sanitizeMore, sanitizeText, sanitizeTextOrArray, hasBreaks, splitBreaks, placeholderToBreak, breakToPlaceholder, getUrl, evaluate, getMax, getMin, parseGenericTypes, countOccurrence, shouldCombineSets, processSet, isMathMLSupported, katexRegex, hasKatex, calculateMathMLDimensions, renderKatex, common_default;
  var init_common = __esm({
    "src/diagrams/common/common.ts"() {
      "use strict";
      import_dompurify = __toESM(require_purify(), 1);
      lineBreakRegex = //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 = import_dompurify.default.sanitize(txt);
        return sanitizedText;
      }, "removeScript");
      sanitizeMore = /* @__PURE__ */ __name((text3, config6) => {
        if (config6.flowchart?.htmlLabels !== false) {
          const level = config6.securityLevel;
          if (level === "antiscript" || level === "strict") {
            text3 = removeScript(text3);
          } else if (level !== "loose") {
            text3 = breakToPlaceholder(text3);
            text3 = text3.replace(//g, ">");
            text3 = text3.replace(/=/g, "=");
            text3 = placeholderToBreak(text3);
          }
        }
        return text3;
      }, "sanitizeMore");
      sanitizeText = /* @__PURE__ */ __name((text3, config6) => {
        if (!text3) {
          return text3;
        }
        if (config6.dompurifyConfig) {
          text3 = import_dompurify.default.sanitize(sanitizeMore(text3, config6), config6.dompurifyConfig).toString();
        } else {
          text3 = import_dompurify.default.sanitize(sanitizeMore(text3, config6), {
            FORBID_TAGS: ["style"]
          }).toString();
        }
        return text3;
      }, "sanitizeText");
      sanitizeTextOrArray = /* @__PURE__ */ __name((a2, config6) => {
        if (typeof a2 === "string") {
          return sanitizeText(a2, config6);
        }
        return a2.flat().map((x5) => sanitizeText(x5, config6));
      }, "sanitizeTextOrArray");
      hasBreaks = /* @__PURE__ */ __name((text3) => {
        return lineBreakRegex.test(text3);
      }, "hasBreaks");
      splitBreaks = /* @__PURE__ */ __name((text3) => {
        return text3.split(lineBreakRegex);
      }, "splitBreaks");
      placeholderToBreak = /* @__PURE__ */ __name((s2) => {
        return s2.replace(/#br#/g, "
"); }, "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 = url.replaceAll(/\(/g, "\\("); url = url.replaceAll(/\)/g, "\\)"); } return url; }, "getUrl"); evaluate = /* @__PURE__ */ __name((val) => val === false || ["false", "null", "0"].includes(String(val).trim().toLowerCase()) ? false : true, "evaluate"); getMax = /* @__PURE__ */ __name(function(...values2) { const newValues = values2.filter((value2) => { return !isNaN(value2); }); return Math.max(...newValues); }, "getMax"); getMin = /* @__PURE__ */ __name(function(...values2) { const newValues = values2.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 last3 = chars.lastIndexOf("~"); while (first3 !== -1 && last3 !== -1 && first3 !== last3) { chars[first3] = "<"; chars[last3] = ">"; first3 = chars.indexOf("~"); last3 = chars.lastIndexOf("~"); } if (hasStartingTilde) { chars.unshift("~"); } return chars.join(""); }, "processSet"); isMathMLSupported = /* @__PURE__ */ __name(() => window.MathMLElement !== void 0, "isMathMLSupported"); katexRegex = /\$\$(.*)\$\$/g; hasKatex = /* @__PURE__ */ __name((text3) => (text3.match(katexRegex)?.length ?? 0) > 0, "hasKatex"); calculateMathMLDimensions = /* @__PURE__ */ __name(async (text3, config6) => { text3 = await renderKatex(text3, config6); const divElem = document.createElement("div"); divElem.innerHTML = text3; 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"); renderKatex = /* @__PURE__ */ __name(async (text3, config6) => { if (!hasKatex(text3)) { return text3; } if (!(isMathMLSupported() || config6.legacyMathML || config6.forceLegacyMathML)) { return text3.replace(katexRegex, "MathML is unsupported in this environment."); } const { default: katex2 } = await Promise.resolve().then(() => (init_katex(), katex_exports)); const outputMode = config6.forceLegacyMathML || !isMathMLSupported() && config6.legacyMathML ? "htmlAndMathml" : "mathml"; return text3.split(lineBreakRegex).map( (line2) => hasKatex(line2) ? `
${line2}
` : `
${line2}
` ).join("").replace( katexRegex, (_2, c3) => katex2.renderToString(c3, { throwOnError: true, displayMode: true, output: outputMode }).replace(/\n/g, " ").replace(//g, "") ); }, "renderKatex"); common_default = { getRows, sanitizeText, sanitizeTextOrArray, hasBreaks, splitBreaks, lineBreakRegex, removeScript, getUrl, evaluate, getMax, getMin }; } }); // 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, padding2, 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 + padding2 * 2; height2 = sHeight + padding2 * 2; log.info(`Calculated bounds: ${width3}x${height2}`); configureSvgSize(svgElem, height2, width3, useMaxWidth); const vBox = `${svgBounds.x - padding2} ${svgBounds.y - padding2} ${svgBounds.width + 2 * padding2} ${svgBounds.height + 2 * padding2}`; svgElem.attr("viewBox", vBox); }, "setupGraphViewbox"); } }); // src/styles.ts var themes, getStyles, addStylesForDiagram, styles_default; var init_styles = __esm({ "src/styles.ts"() { "use strict"; init_logger(); themes = {}; getStyles = /* @__PURE__ */ __name((type3, userStyles, options3) => { let diagramStyles = ""; if (type3 in themes && themes[type3]) { diagramStyles = themes[type3](options3); } else { log.warn(`No theme found for ${type3}`); } return ` & { font-family: ${options3.fontFamily}; font-size: ${options3.fontSize}; fill: ${options3.textColor} } /* Classes common for multiple diagrams */ & .error-icon { fill: ${options3.errorBkgColor}; } & .error-text { fill: ${options3.errorTextColor}; stroke: ${options3.errorTextColor}; } & .edge-thickness-normal { stroke-width: 1px; } & .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: ${options3.lineColor}; stroke: ${options3.lineColor}; } & .marker.cross { stroke: ${options3.lineColor}; } & svg { font-family: ${options3.fontFamily}; font-size: ${options3.fontSize}; } & p { margin: 0 } ${diagramStyles} ${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((text3) => sanitizeText(text3, getConfig2()), "sanitizeText"); setupGraphViewbox2 = setupGraphViewbox; getCommonDb = /* @__PURE__ */ __name(() => { return commonDb_exports; }, "getCommonDb"); diagrams = {}; registerDiagram = /* @__PURE__ */ __name((id28, diagram25, detector26) => { if (diagrams[id28]) { log2.warn(`Diagram with id ${id28} already registered. Overwriting.`); } diagrams[id28] = diagram25; if (detector26) { addDetector(id28, detector26); } addStylesForDiagram(id28, diagram25.styles); diagram25.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, link3) { 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 link3 === "object") { let [key, value2] = Object.entries(link3)[0]; rel2[key] = value2; } else { rel2.link = link3; } rel2.wrap = autoWrap(); }, "addRel"); addPersonOrSystem = /* @__PURE__ */ __name(function(typeC4Shape, alias, label, descr, sprite, tags2, link3) { 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 link3 === "object") { let [key, value2] = Object.entries(link3)[0]; personOrSystem[key] = value2; } else { personOrSystem.link = link3; } personOrSystem.typeC4Shape = { text: typeC4Shape }; personOrSystem.parentBoundary = currentBoundaryParse; personOrSystem.wrap = autoWrap(); }, "addPersonOrSystem"); addContainer = /* @__PURE__ */ __name(function(typeC4Shape, alias, label, techn, descr, sprite, tags2, link3) { 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 link3 === "object") { let [key, value2] = Object.entries(link3)[0]; container2[key] = value2; } else { container2.link = link3; } container2.wrap = autoWrap(); container2.typeC4Shape = { text: typeC4Shape }; container2.parentBoundary = currentBoundaryParse; }, "addContainer"); addComponent = /* @__PURE__ */ __name(function(typeC4Shape, alias, label, techn, descr, sprite, tags2, link3) { 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 link3 === "object") { let [key, value2] = Object.entries(link3)[0]; component2[key] = value2; } else { component2.link = link3; } component2.wrap = autoWrap(); component2.typeC4Shape = { text: typeC4Shape }; component2.parentBoundary = currentBoundaryParse; }, "addComponent"); addPersonOrSystemBoundary = /* @__PURE__ */ __name(function(alias, label, type3, tags2, link3) { 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 link3 === "object") { let [key, value2] = Object.entries(link3)[0]; boundary[key] = value2; } else { boundary.link = link3; } boundary.parentBoundary = currentBoundaryParse; boundary.wrap = autoWrap(); parentBoundaryParse = currentBoundaryParse; currentBoundaryParse = alias; boundaryParseStack.push(parentBoundaryParse); }, "addPersonOrSystemBoundary"); addContainerBoundary = /* @__PURE__ */ __name(function(alias, label, type3, tags2, link3) { 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 link3 === "object") { let [key, value2] = Object.entries(link3)[0]; boundary[key] = value2; } else { boundary.link = link3; } 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, link3) { 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 link3 === "object") { let [key, value2] = Object.entries(link3)[0]; boundary[key] = value2; } else { boundary.link = link3; } 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/[email protected]/node_modules/d3-array/src/ascending.js function ascending(a2, b2) { return a2 == null || b2 == null ? NaN : a2 < b2 ? -1 : a2 > b2 ? 1 : a2 >= b2 ? 0 : NaN; } var init_ascending = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-array/src/ascending.js"() { "use strict"; __name(ascending, "ascending"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-array/src/descending.js function descending(a2, b2) { return a2 == null || b2 == null ? NaN : b2 < a2 ? -1 : b2 > a2 ? 1 : b2 >= a2 ? 0 : NaN; } var init_descending = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-array/src/descending.js"() { "use strict"; __name(descending, "descending"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-array/src/bisector.js function bisector(f3) { let compare1, compare2, delta; if (f3.length !== 2) { compare1 = ascending; compare2 = /* @__PURE__ */ __name((d2, x5) => ascending(f3(d2), x5), "compare2"); delta = /* @__PURE__ */ __name((d2, x5) => f3(d2) - x5, "delta"); } else { compare1 = f3 === ascending || f3 === descending ? f3 : zero; compare2 = f3; delta = f3; } 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/[email protected]/node_modules/d3-array/src/bisector.js"() { "use strict"; init_ascending(); init_descending(); __name(bisector, "bisector"); __name(zero, "zero"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-array/src/number.js function number(x5) { return x5 === null ? NaN : +x5; } var init_number = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-array/src/number.js"() { "use strict"; __name(number, "number"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-array/src/bisect.js var ascendingBisect, bisectRight, bisectLeft, bisectCenter, bisect_default; var init_bisect = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/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/[email protected]/node_modules/internmap/src/index.js"() { "use strict"; InternMap = class extends Map { static { __name(this, "InternMap"); } constructor(entries, key = keyof) { super(); Object.defineProperties(this, { _intern: { value: /* @__PURE__ */ new Map() }, _key: { value: key } }); if (entries != null) for (const [key2, value2] of entries) 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/[email protected]/node_modules/d3-array/src/ticks.js function tickSpec(start3, stop5, count) { const step3 = (stop5 - start3) / Math.max(0, count), 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 <= count && count < 2) return tickSpec(start3, stop5, count * 2); return [i1, i2, inc]; } function ticks(start3, stop5, count) { stop5 = +stop5, start3 = +start3, count = +count; if (!(count > 0)) return []; if (start3 === stop5) return [start3]; const reverse2 = stop5 < start3, [i1, i2, inc] = reverse2 ? tickSpec(stop5, start3, count) : tickSpec(start3, stop5, count); 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, count) { stop5 = +stop5, start3 = +start3, count = +count; return tickSpec(start3, stop5, count)[2]; } function tickStep(start3, stop5, count) { stop5 = +stop5, start3 = +start3, count = +count; const reverse2 = stop5 < start3, inc = reverse2 ? tickIncrement(stop5, start3, count) : tickIncrement(start3, stop5, count); return (reverse2 ? -1 : 1) * (inc < 0 ? 1 / -inc : inc); } var e10, e5, e2; var init_ticks = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/d3-array/src/max.js function max(values2, valueof) { let max10; if (valueof === void 0) { for (const value2 of values2) { if (value2 != null && (max10 < value2 || max10 === void 0 && value2 >= value2)) { max10 = value2; } } } else { let index = -1; for (let value2 of values2) { if ((value2 = valueof(value2, ++index, values2)) != null && (max10 < value2 || max10 === void 0 && value2 >= value2)) { max10 = value2; } } } return max10; } var init_max = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-array/src/max.js"() { "use strict"; __name(max, "max"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-array/src/min.js function min(values2, valueof) { let min9; if (valueof === void 0) { for (const value2 of values2) { if (value2 != null && (min9 > value2 || min9 === void 0 && value2 >= value2)) { min9 = value2; } } } else { let index = -1; for (let value2 of values2) { if ((value2 = valueof(value2, ++index, values2)) != null && (min9 > value2 || min9 === void 0 && value2 >= value2)) { min9 = value2; } } } return min9; } var init_min = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-array/src/min.js"() { "use strict"; __name(min, "min"); } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/d3-array/src/range.js"() { "use strict"; __name(range, "range"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-array/src/index.js var init_src2 = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/d3-axis/src/identity.js function identity_default(x5) { return x5; } var init_identity = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-axis/src/identity.js"() { "use strict"; __name(identity_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-axis/src/axis.js function translateX(x5) { return "translate(" + x5 + ",0)"; } function translateY(y5) { return "translate(0," + y5 + ")"; } function number2(scale) { return (d2) => +scale(d2); } function center(scale, offset) { offset = Math.max(0, scale.bandwidth() - offset * 2) / 2; if (scale.round()) offset = Math.round(offset); return (d2) => +scale(d2) + offset; } function entering() { return !this.__axis; } function axis(orient, scale) { 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 values2 = tickValues == null ? scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain() : tickValues, format3 = tickFormat2 == null ? scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity_default : tickFormat2, spacing2 = Math.max(tickSizeInner, 0) + tickPadding, range3 = scale.range(), range0 = +range3[0] + offset, range1 = +range3[range3.length - 1] + offset, position5 = (scale.bandwidth ? center : number2)(scale.copy(), offset), selection2 = context.selection ? context.selection() : context, path4 = selection2.selectAll(".domain").data([null]), tick = selection2.selectAll(".tick").data(values2, scale).order(), tickExit = tick.exit(), tickEnter = tick.enter().append("g").attr("class", "tick"), line2 = tick.select("line"), text3 = 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)); text3 = text3.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); text3 = text3.transition(context); tickExit = tickExit.transition(context).attr("opacity", epsilon).attr("transform", function(d2) { return isFinite(d2 = position5(d2)) ? transform8(d2 + offset) : this.getAttribute("transform"); }); tickEnter.attr("opacity", epsilon).attr("transform", function(d2) { var p3 = this.parentNode.__axis; return transform8((p3 && isFinite(p3 = p3(d2)) ? p3 : position5(d2)) + 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(d2) { return transform8(position5(d2) + offset); }); line2.attr(x5 + "2", k2 * tickSizeInner); text3.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(_2) { return arguments.length ? (scale = _2, axis2) : scale; }; axis2.ticks = function() { return tickArguments = Array.from(arguments), axis2; }; axis2.tickArguments = function(_2) { return arguments.length ? (tickArguments = _2 == null ? [] : Array.from(_2), axis2) : tickArguments.slice(); }; axis2.tickValues = function(_2) { return arguments.length ? (tickValues = _2 == null ? null : Array.from(_2), axis2) : tickValues && tickValues.slice(); }; axis2.tickFormat = function(_2) { return arguments.length ? (tickFormat2 = _2, axis2) : tickFormat2; }; axis2.tickSize = function(_2) { return arguments.length ? (tickSizeInner = tickSizeOuter = +_2, axis2) : tickSizeInner; }; axis2.tickSizeInner = function(_2) { return arguments.length ? (tickSizeInner = +_2, axis2) : tickSizeInner; }; axis2.tickSizeOuter = function(_2) { return arguments.length ? (tickSizeOuter = +_2, axis2) : tickSizeOuter; }; axis2.tickPadding = function(_2) { return arguments.length ? (tickPadding = +_2, axis2) : tickPadding; }; axis2.offset = function(_2) { return arguments.length ? (offset = +_2, axis2) : offset; }; return axis2; } function axisTop(scale) { return axis(top, scale); } function axisBottom(scale) { return axis(bottom, scale); } var top, right, bottom, left, epsilon; var init_axis = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/d3-axis/src/index.js var init_src3 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-axis/src/index.js"() { "use strict"; init_axis(); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-dispatch/src/dispatch.js function dispatch() { for (var i2 = 0, n2 = arguments.length, _2 = {}, t4; i2 < n2; ++i2) { if (!(t4 = arguments[i2] + "") || t4 in _2 || /[\s.]/.test(t4)) throw new Error("illegal type: " + t4); _2[t4] = []; } return new Dispatch(_2); } function Dispatch(_2) { this._ = _2; } 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/[email protected]/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 _2 = this._, T3 = parseTypenames(typename + "", _2), t4, i2 = -1, n2 = T3.length; if (arguments.length < 2) { while (++i2 < n2) if ((t4 = (typename = T3[i2]).type) && (t4 = get(_2[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) _2[t4] = set(_2[t4], typename.name, callback); else if (callback == null) for (t4 in _2) _2[t4] = set(_2[t4], typename.name, null); } return this; }, "on"), copy: /* @__PURE__ */ __name(function() { var copy5 = {}, _2 = this._; for (var t4 in _2) copy5[t4] = _2[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/[email protected]/node_modules/d3-dispatch/src/index.js var init_src4 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-dispatch/src/index.js"() { "use strict"; init_dispatch(); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-selection/src/namespaces.js var xhtml, namespaces_default; var init_namespaces = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/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/[email protected]/node_modules/d3-selection/src/namespace.js"() { "use strict"; init_namespaces(); __name(namespace_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/node_modules/d3-selection/src/selector.js"() { "use strict"; __name(none, "none"); __name(selector_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-selection/src/selection/select.js function select_default(select) { if (typeof select !== "function") select = selector_default(select); for (var groups = this._groups, m2 = groups.length, subgroups = new Array(m2), j2 = 0; j2 < m2; ++j2) { for (var group2 = groups[j2], n2 = group2.length, subgroup = subgroups[j2] = 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/[email protected]/node_modules/d3-selection/src/selection/select.js"() { "use strict"; init_selection(); init_selector(); __name(select_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/d3-selection/src/array.js"() { "use strict"; __name(array, "array"); } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/d3-selection/src/selectorAll.js"() { "use strict"; __name(empty, "empty"); __name(selectorAll_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-selection/src/selection/selectAll.js function arrayAll(select) { return function() { return array(select.apply(this, arguments)); }; } function selectAll_default(select) { if (typeof select === "function") select = arrayAll(select); else select = selectorAll_default(select); for (var groups = this._groups, m2 = groups.length, subgroups = [], parents3 = [], j2 = 0; j2 < m2; ++j2) { for (var group2 = groups[j2], 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/[email protected]/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/[email protected]/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/[email protected]/node_modules/d3-selection/src/matcher.js"() { "use strict"; __name(matcher_default, "default"); __name(childMatcher, "childMatcher"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-selection/src/selection/selectChild.js function childFind(match2) { return function() { return find.call(this.children, match2); }; } function childFirst() { return this.firstElementChild; } function selectChild_default(match2) { return this.select(match2 == null ? childFirst : childFind(typeof match2 === "function" ? match2 : childMatcher(match2))); } var find; var init_selectChild = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/d3-selection/src/selection/selectChildren.js function children() { return Array.from(this.children); } function childrenFilter(match2) { return function() { return filter.call(this.children, match2); }; } function selectChildren_default(match2) { return this.selectAll(match2 == null ? children : childrenFilter(typeof match2 === "function" ? match2 : childMatcher(match2))); } var filter; var init_selectChildren = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/d3-selection/src/selection/filter.js function filter_default(match2) { if (typeof match2 !== "function") match2 = matcher_default(match2); for (var groups = this._groups, m2 = groups.length, subgroups = new Array(m2), j2 = 0; j2 < m2; ++j2) { for (var group2 = groups[j2], n2 = group2.length, subgroup = subgroups[j2] = [], node2, i2 = 0; i2 < n2; ++i2) { if ((node2 = group2[i2]) && match2.call(node2, node2.__data__, i2, group2)) { subgroup.push(node2); } } } return new Selection(subgroups, this._parents); } var init_filter = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-selection/src/selection/filter.js"() { "use strict"; init_selection(); init_matcher(); __name(filter_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-selection/src/selection/sparse.js function sparse_default(update2) { return new Array(update2.length); } var init_sparse = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-selection/src/selection/sparse.js"() { "use strict"; __name(sparse_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/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/[email protected]/node_modules/d3-selection/src/constant.js function constant_default(x5) { return function() { return x5; }; } var init_constant = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-selection/src/constant.js"() { "use strict"; __name(constant_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-selection/src/selection/data.js function bindIndex(parent4, group2, enter, update2, exit, data5) { var i2 = 0, node2, groupLength3 = group2.length, dataLength = data5.length; for (; i2 < dataLength; ++i2) { if (node2 = group2[i2]) { node2.__data__ = data5[i2]; update2[i2] = node2; } else { enter[i2] = new EnterNode(parent4, data5[i2]); } } for (; i2 < groupLength3; ++i2) { if (node2 = group2[i2]) { exit[i2] = node2; } } } function bindKey(parent4, group2, enter, update2, exit, data5, key) { var i2, node2, nodeByKeyValue = /* @__PURE__ */ new Map(), groupLength3 = group2.length, dataLength = data5.length, keyValues = new Array(groupLength3), keyValue; for (i2 = 0; i2 < groupLength3; ++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, data5[i2], i2, data5) + ""; if (node2 = nodeByKeyValue.get(keyValue)) { update2[i2] = node2; node2.__data__ = data5[i2]; nodeByKeyValue.delete(keyValue); } else { enter[i2] = new EnterNode(parent4, data5[i2]); } } for (i2 = 0; i2 < groupLength3; ++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 m2 = groups.length, update2 = new Array(m2), enter = new Array(m2), exit = new Array(m2), j2 = 0; j2 < m2; ++j2) { var parent4 = parents3[j2], group2 = groups[j2], groupLength3 = group2.length, data5 = arraylike(value2.call(parent4, parent4 && parent4.__data__, j2, parents3)), dataLength = data5.length, enterGroup = enter[j2] = new Array(dataLength), updateGroup = update2[j2] = new Array(dataLength), exitGroup = exit[j2] = new Array(groupLength3); bind(parent4, group2, enterGroup, updateGroup, exitGroup, data5, 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(data5) { return typeof data5 === "object" && "length" in data5 ? data5 : Array.from(data5); } var init_data = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/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/[email protected]/node_modules/d3-selection/src/selection/exit.js"() { "use strict"; init_sparse(); init_selection(); __name(exit_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/d3-selection/src/selection/join.js"() { "use strict"; __name(join_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-selection/src/selection/merge.js function merge_default(context) { var selection2 = context.selection ? context.selection() : context; for (var groups0 = this._groups, groups1 = selection2._groups, m0 = groups0.length, m1 = groups1.length, m2 = Math.min(m0, m1), merges = new Array(m0), j2 = 0; j2 < m2; ++j2) { for (var group0 = groups0[j2], group1 = groups1[j2], n2 = group0.length, merge5 = merges[j2] = new Array(n2), node2, i2 = 0; i2 < n2; ++i2) { if (node2 = group0[i2] || group1[i2]) { merge5[i2] = node2; } } } for (; j2 < m0; ++j2) { merges[j2] = groups0[j2]; } return new Selection(merges, this._parents); } var init_merge2 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-selection/src/selection/merge.js"() { "use strict"; init_selection(); __name(merge_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-selection/src/selection/order.js function order_default() { for (var groups = this._groups, j2 = -1, m2 = groups.length; ++j2 < m2; ) { for (var group2 = groups[j2], 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/[email protected]/node_modules/d3-selection/src/selection/order.js"() { "use strict"; __name(order_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-selection/src/selection/sort.js function sort_default(compare) { if (!compare) compare = ascending2; function compareNode(a2, b2) { return a2 && b2 ? compare(a2.__data__, b2.__data__) : !a2 - !b2; } __name(compareNode, "compareNode"); for (var groups = this._groups, m2 = groups.length, sortgroups = new Array(m2), j2 = 0; j2 < m2; ++j2) { for (var group2 = groups[j2], n2 = group2.length, sortgroup = sortgroups[j2] = 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, b2) { return a2 < b2 ? -1 : a2 > b2 ? 1 : a2 >= b2 ? 0 : NaN; } var init_sort = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-selection/src/selection/sort.js"() { "use strict"; init_selection(); __name(sort_default, "default"); __name(ascending2, "ascending"); } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/d3-selection/src/selection/call.js"() { "use strict"; __name(call_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-selection/src/selection/nodes.js function nodes_default() { return Array.from(this); } var init_nodes = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-selection/src/selection/nodes.js"() { "use strict"; __name(nodes_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-selection/src/selection/node.js function node_default() { for (var groups = this._groups, j2 = 0, m2 = groups.length; j2 < m2; ++j2) { for (var group2 = groups[j2], 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/[email protected]/node_modules/d3-selection/src/selection/node.js"() { "use strict"; __name(node_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-selection/src/selection/size.js function size_default() { let size5 = 0; for (const node2 of this) ++size5; return size5; } var init_size2 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-selection/src/selection/size.js"() { "use strict"; __name(size_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-selection/src/selection/empty.js function empty_default() { return !this.node(); } var init_empty = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-selection/src/selection/empty.js"() { "use strict"; __name(empty_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-selection/src/selection/each.js function each_default(callback) { for (var groups = this._groups, j2 = 0, m2 = groups.length; j2 < m2; ++j2) { for (var group2 = groups[j2], 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/[email protected]/node_modules/d3-selection/src/selection/each.js"() { "use strict"; __name(each_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/node_modules/d3-selection/src/window.js"() { "use strict"; __name(window_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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 list2 = classList(node2), i2 = -1, n2 = names.length; while (++i2 < n2) list2.add(names[i2]); } function classedRemove(node2, names) { var list2 = classList(node2), i2 = -1, n2 = names.length; while (++i2 < n2) list2.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 list2 = classList(this.node()), i2 = -1, n2 = names.length; while (++i2 < n2) if (!list2.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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/node_modules/d3-selection/src/selection/raise.js"() { "use strict"; __name(raise, "raise"); __name(raise_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/d3-selection/src/selection/lower.js"() { "use strict"; __name(lower, "lower"); __name(lower_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-selection/src/selection/append.js function append_default(name) { var create2 = typeof name === "function" ? name : creator_default(name); return this.select(function() { return this.appendChild(create2.apply(this, arguments)); }); } var init_append = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-selection/src/selection/append.js"() { "use strict"; init_creator(); __name(append_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-selection/src/selection/insert.js function constantNull() { return null; } function insert_default(name, before) { var create2 = typeof name === "function" ? name : creator_default(name), select = before == null ? constantNull : typeof before === "function" ? before : selector_default(before); return this.select(function() { return this.insertBefore(create2.apply(this, arguments), select.apply(this, arguments) || null); }); } var init_insert = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-selection/src/selection/insert.js"() { "use strict"; init_creator(); init_selector(); __name(constantNull, "constantNull"); __name(insert_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/d3-selection/src/selection/remove.js"() { "use strict"; __name(remove, "remove"); __name(remove_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-selection/src/selection/clone.js function selection_cloneShallow() { var clone5 = this.cloneNode(false), parent4 = this.parentNode; return parent4 ? parent4.insertBefore(clone5, this.nextSibling) : clone5; } function selection_cloneDeep() { var clone5 = this.cloneNode(true), parent4 = this.parentNode; return parent4 ? parent4.insertBefore(clone5, this.nextSibling) : clone5; } function clone_default(deep) { return this.select(deep ? selection_cloneDeep : selection_cloneShallow); } var init_clone = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/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/[email protected]/node_modules/d3-selection/src/selection/datum.js"() { "use strict"; __name(datum_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/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 j2 = 0, i2 = -1, m2 = on3.length, o2; j2 < m2; ++j2) { if (o2 = on3[j2], (!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, options3) { return function() { var on3 = this.__on, o2, listener = contextListener(value2); if (on3) for (var j2 = 0, m2 = on3.length; j2 < m2; ++j2) { if ((o2 = on3[j2]).type === typename.type && o2.name === typename.name) { this.removeEventListener(o2.type, o2.listener, o2.options); this.addEventListener(o2.type, o2.listener = listener, o2.options = options3); o2.value = value2; return; } } this.addEventListener(typename.type, listener, options3); o2 = { type: typename.type, name: typename.name, value: value2, listener, options: options3 }; if (!on3) this.__on = [o2]; else on3.push(o2); }; } function on_default(typename, value2, options3) { var typenames = parseTypenames2(typename + ""), i2, n2 = typenames.length, t4; if (arguments.length < 2) { var on3 = this.node().__on; if (on3) for (var j2 = 0, m2 = on3.length, o2; j2 < m2; ++j2) { for (i2 = 0, o2 = on3[j2]; 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, options3)); return this; } var init_on = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/node_modules/d3-selection/src/selection/iterator.js function* iterator_default() { for (var groups = this._groups, j2 = 0, m2 = groups.length; j2 < m2; ++j2) { for (var group2 = groups[j2], i2 = 0, n2 = group2.length, node2; i2 < n2; ++i2) { if (node2 = group2[i2]) yield node2; } } } var init_iterator = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-selection/src/selection/iterator.js"() { "use strict"; __name(iterator_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/node_modules/d3-selection/src/select.js"() { "use strict"; init_selection(); __name(select_default2, "default"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-selection/src/index.js var init_src5 = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/d3-drag/src/index.js var init_src6 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-drag/src/index.js"() { "use strict"; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/d3-color/src/define.js"() { "use strict"; __name(define_default, "default"); __name(extend, "extend"); } }); // ../../node_modules/.pnpm/[email protected]/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 m2, l2; format3 = (format3 + "").trim().toLowerCase(); return (m2 = reHex.exec(format3)) ? (l2 = m2[1].length, m2 = parseInt(m2[1], 16), l2 === 6 ? rgbn(m2) : l2 === 3 ? new Rgb(m2 >> 8 & 15 | m2 >> 4 & 240, m2 >> 4 & 15 | m2 & 240, (m2 & 15) << 4 | m2 & 15, 1) : l2 === 8 ? rgba2(m2 >> 24 & 255, m2 >> 16 & 255, m2 >> 8 & 255, (m2 & 255) / 255) : l2 === 4 ? rgba2(m2 >> 12 & 15 | m2 >> 8 & 240, m2 >> 8 & 15 | m2 >> 4 & 240, m2 >> 4 & 15 | m2 & 240, ((m2 & 15) << 4 | m2 & 15) / 255) : null) : (m2 = reRgbInteger.exec(format3)) ? new Rgb(m2[1], m2[2], m2[3], 1) : (m2 = reRgbPercent.exec(format3)) ? new Rgb(m2[1] * 255 / 100, m2[2] * 255 / 100, m2[3] * 255 / 100, 1) : (m2 = reRgbaInteger.exec(format3)) ? rgba2(m2[1], m2[2], m2[3], m2[4]) : (m2 = reRgbaPercent.exec(format3)) ? rgba2(m2[1] * 255 / 100, m2[2] * 255 / 100, m2[3] * 255 / 100, m2[4]) : (m2 = reHslPercent.exec(format3)) ? hsla(m2[1], m2[2] / 100, m2[3] / 100, 1) : (m2 = reHslaPercent.exec(format3)) ? hsla(m2[1], m2[2] / 100, m2[3] / 100, m2[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, b2, a2) { if (a2 <= 0) r2 = g2 = b2 = NaN; return new Rgb(r2, g2, b2, 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, b2, opacity) { return arguments.length === 1 ? rgbConvert(r2) : new Rgb(r2, g2, b2, opacity == null ? 1 : opacity); } function Rgb(r2, g2, b2, opacity) { this.r = +r2; this.g = +g2; this.b = +b2; 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(h2, s2, l2, a2) { if (a2 <= 0) h2 = s2 = l2 = NaN; else if (l2 <= 0 || l2 >= 1) h2 = s2 = NaN; else if (s2 <= 0) h2 = NaN; return new Hsl(h2, s2, l2, 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, b2 = o2.b / 255, min9 = Math.min(r2, g2, b2), max10 = Math.max(r2, g2, b2), h2 = NaN, s2 = max10 - min9, l2 = (max10 + min9) / 2; if (s2) { if (r2 === max10) h2 = (g2 - b2) / s2 + (g2 < b2) * 6; else if (g2 === max10) h2 = (b2 - r2) / s2 + 2; else h2 = (r2 - g2) / s2 + 4; s2 /= l2 < 0.5 ? max10 + min9 : 2 - max10 - min9; h2 *= 60; } else { s2 = l2 > 0 && l2 < 1 ? 0 : h2; } return new Hsl(h2, s2, l2, o2.opacity); } function hsl(h2, s2, l2, opacity) { return arguments.length === 1 ? hslConvert(h2) : new Hsl(h2, s2, l2, opacity == null ? 1 : opacity); } function Hsl(h2, s2, l2, opacity) { this.h = +h2; this.s = +s2; this.l = +l2; 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(h2, m1, m2) { return (h2 < 60 ? m1 + (m2 - m1) * h2 / 60 : h2 < 180 ? m2 : h2 < 240 ? m1 + (m2 - m1) * (240 - h2) / 60 : m1) * 255; } var darker, brighter, reI, reN, reP, reHex, reRgbInteger, reRgbPercent, reRgbaInteger, reRgbaPercent, reHslPercent, reHslaPercent, named; var init_color2 = __esm({ "../../node_modules/.pnpm/[email protected]/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 h2 = this.h % 360 + (this.h < 0) * 360, s2 = isNaN(h2) || isNaN(this.s) ? 0 : this.s, l2 = this.l, m2 = l2 + (l2 < 0.5 ? l2 : 1 - l2) * s2, m1 = 2 * l2 - m2; return new Rgb( hsl2rgb(h2 >= 240 ? h2 - 240 : h2 + 120, m1, m2), hsl2rgb(h2, m1, m2), hsl2rgb(h2 < 120 ? h2 + 240 : h2 - 120, m1, m2), this.opacity ); }, clamp() { return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity)); }, displayable() { return (0 <= this.s && this.s <= 1 || isNaN(this.s)) && (0 <= this.l && this.l <= 1) && (0 <= this.opacity && this.opacity <= 1); }, formatHsl() { const a2 = clampa(this.opacity); return `${a2 === 1 ? "hsl(" : "hsla("}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a2 === 1 ? ")" : `, ${a2})`}`; } })); __name(clamph, "clamph"); __name(clampt, "clampt"); __name(hsl2rgb, "hsl2rgb"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-color/src/math.js var radians, degrees; var init_math = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-color/src/math.js"() { "use strict"; radians = Math.PI / 180; degrees = 180 / Math.PI; } }); // ../../node_modules/.pnpm/[email protected]/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), b2 = rgb2lrgb(o2.b), y5 = xyz2lab((0.2225045 * r2 + 0.7168786 * g2 + 0.0606169 * b2) / Yn), x5, z2; if (r2 === g2 && g2 === b2) x5 = z2 = y5; else { x5 = xyz2lab((0.4360747 * r2 + 0.3850649 * g2 + 0.1430804 * b2) / Xn); z2 = xyz2lab((0.0139322 * r2 + 0.0971045 * g2 + 0.7141733 * b2) / Zn); } return new Lab(116 * y5 - 16, 500 * (x5 - y5), 200 * (y5 - z2), o2.opacity); } function lab(l2, a2, b2, opacity) { return arguments.length === 1 ? labConvert(l2) : new Lab(l2, a2, b2, opacity == null ? 1 : opacity); } function Lab(l2, a2, b2, opacity) { this.l = +l2; this.a = +a2; this.b = +b2; 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 h2 = Math.atan2(o2.b, o2.a) * degrees; return new Hcl(h2 < 0 ? h2 + 360 : h2, Math.sqrt(o2.a * o2.a + o2.b * o2.b), o2.l, o2.opacity); } function hcl(h2, c3, l2, opacity) { return arguments.length === 1 ? hclConvert(h2) : new Hcl(h2, c3, l2, opacity == null ? 1 : opacity); } function Hcl(h2, c3, l2, opacity) { this.h = +h2; this.c = +c3; this.l = +l2; this.opacity = +opacity; } function hcl2lab(o2) { if (isNaN(o2.h)) return new Lab(o2.l, 0, 0, o2.opacity); var h2 = o2.h * radians; return new Lab(o2.l, Math.cos(h2) * o2.c, Math.sin(h2) * o2.c, o2.opacity); } var K, Xn, Yn, Zn, t0, t1, t2, t3; var init_lab = __esm({ "../../node_modules/.pnpm/[email protected]/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 y5 = (this.l + 16) / 116, x5 = isNaN(this.a) ? y5 : y5 + this.a / 500, z2 = isNaN(this.b) ? y5 : y5 - this.b / 200; x5 = Xn * lab2xyz(x5); y5 = Yn * lab2xyz(y5); z2 = Zn * lab2xyz(z2); return new Rgb( lrgb2rgb(3.1338561 * x5 - 1.6168667 * y5 - 0.4906146 * z2), lrgb2rgb(-0.9787684 * x5 + 1.9161415 * y5 + 0.033454 * z2), lrgb2rgb(0.0719453 * x5 - 0.2289914 * y5 + 1.4052427 * z2), 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/[email protected]/node_modules/d3-color/src/index.js var init_src7 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-color/src/index.js"() { "use strict"; init_color2(); init_lab(); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-interpolate/src/basis.js function basis(t13, v0, v12, v22, 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) * v22 + t32 * v3) / 6; } function basis_default(values2) { var n2 = values2.length - 1; return function(t4) { var i2 = t4 <= 0 ? t4 = 0 : t4 >= 1 ? (t4 = 1, n2 - 1) : Math.floor(t4 * n2), v12 = values2[i2], v22 = values2[i2 + 1], v0 = i2 > 0 ? values2[i2 - 1] : 2 * v12 - v22, v3 = i2 < n2 - 1 ? values2[i2 + 2] : 2 * v22 - v12; return basis((t4 - i2 / n2) * n2, v0, v12, v22, v3); }; } var init_basis = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-interpolate/src/basis.js"() { "use strict"; __name(basis, "basis"); __name(basis_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-interpolate/src/basisClosed.js function basisClosed_default(values2) { var n2 = values2.length; return function(t4) { var i2 = Math.floor(((t4 %= 1) < 0 ? ++t4 : t4) * n2), v0 = values2[(i2 + n2 - 1) % n2], v12 = values2[i2 % n2], v22 = values2[(i2 + 1) % n2], v3 = values2[(i2 + 2) % n2]; return basis((t4 - i2 / n2) * n2, v0, v12, v22, v3); }; } var init_basisClosed = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-interpolate/src/basisClosed.js"() { "use strict"; init_basis(); __name(basisClosed_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-interpolate/src/constant.js var constant_default2; var init_constant2 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-interpolate/src/constant.js"() { "use strict"; constant_default2 = /* @__PURE__ */ __name((x5) => () => x5, "default"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-interpolate/src/color.js function linear(a2, d2) { return function(t4) { return a2 + t4 * d2; }; } function exponential(a2, b2, y5) { return a2 = Math.pow(a2, y5), b2 = Math.pow(b2, y5) - a2, y5 = 1 / y5, function(t4) { return Math.pow(a2 + t4 * b2, y5); }; } function hue(a2, b2) { var d2 = b2 - a2; return d2 ? linear(a2, d2 > 180 || d2 < -180 ? d2 - 360 * Math.round(d2 / 360) : d2) : constant_default2(isNaN(a2) ? b2 : a2); } function gamma(y5) { return (y5 = +y5) === 1 ? nogamma : function(a2, b2) { return b2 - a2 ? exponential(a2, b2, y5) : constant_default2(isNaN(a2) ? b2 : a2); }; } function nogamma(a2, b2) { var d2 = b2 - a2; return d2 ? linear(a2, d2) : constant_default2(isNaN(a2) ? b2 : a2); } var init_color3 = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/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), b2 = 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; b2[i2] = color2.b || 0; } r2 = spline(r2); g2 = spline(g2); b2 = spline(b2); color2.opacity = 1; return function(t4) { color2.r = r2(t4); color2.g = g2(t4); color2.b = b2(t4); return color2 + ""; }; }; } var rgb_default2, rgbBasis, rgbBasisClosed; var init_rgb2 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-interpolate/src/rgb.js"() { "use strict"; init_src7(); init_basis(); init_basisClosed(); init_color3(); rgb_default2 = (/* @__PURE__ */ __name(function rgbGamma(y5) { var color2 = gamma(y5); function rgb2(start3, end2) { var r2 = color2((start3 = rgb(start3)).r, (end2 = rgb(end2)).r), g2 = color2(start3.g, end2.g), b2 = color2(start3.b, end2.b), opacity = nogamma(start3.opacity, end2.opacity); return function(t4) { start3.r = r2(t4); start3.g = g2(t4); start3.b = b2(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/[email protected]/node_modules/d3-interpolate/src/numberArray.js function numberArray_default(a2, b2) { if (!b2) b2 = []; var n2 = a2 ? Math.min(b2.length, a2.length) : 0, c3 = b2.slice(), i2; return function(t4) { for (i2 = 0; i2 < n2; ++i2) c3[i2] = a2[i2] * (1 - t4) + b2[i2] * t4; return c3; }; } function isNumberArray(x5) { return ArrayBuffer.isView(x5) && !(x5 instanceof DataView); } var init_numberArray = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-interpolate/src/numberArray.js"() { "use strict"; __name(numberArray_default, "default"); __name(isNumberArray, "isNumberArray"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-interpolate/src/array.js function genericArray(a2, b2) { var nb = b2 ? b2.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], b2[i2]); for (; i2 < nb; ++i2) c3[i2] = b2[i2]; return function(t4) { for (i2 = 0; i2 < na; ++i2) c3[i2] = x5[i2](t4); return c3; }; } var init_array2 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-interpolate/src/array.js"() { "use strict"; init_value(); __name(genericArray, "genericArray"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-interpolate/src/date.js function date_default(a2, b2) { var d2 = /* @__PURE__ */ new Date(); return a2 = +a2, b2 = +b2, function(t4) { return d2.setTime(a2 * (1 - t4) + b2 * t4), d2; }; } var init_date = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-interpolate/src/date.js"() { "use strict"; __name(date_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-interpolate/src/number.js function number_default(a2, b2) { return a2 = +a2, b2 = +b2, function(t4) { return a2 * (1 - t4) + b2 * t4; }; } var init_number2 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-interpolate/src/number.js"() { "use strict"; __name(number_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-interpolate/src/object.js function object_default(a2, b2) { var i2 = {}, c3 = {}, k2; if (a2 === null || typeof a2 !== "object") a2 = {}; if (b2 === null || typeof b2 !== "object") b2 = {}; for (k2 in b2) { if (k2 in a2) { i2[k2] = value_default(a2[k2], b2[k2]); } else { c3[k2] = b2[k2]; } } return function(t4) { for (k2 in i2) c3[k2] = i2[k2](t4); return c3; }; } var init_object = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-interpolate/src/object.js"() { "use strict"; init_value(); __name(object_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-interpolate/src/string.js function zero2(b2) { return function() { return b2; }; } function one(b2) { return function(t4) { return b2(t4) + ""; }; } function string_default(a2, b2) { var bi = reA.lastIndex = reB.lastIndex = 0, am, bm, bs, i2 = -1, s2 = [], q2 = []; a2 = a2 + "", b2 = b2 + ""; while ((am = reA.exec(a2)) && (bm = reB.exec(b2))) { if ((bs = bm.index) > bi) { bs = b2.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; q2.push({ i: i2, x: number_default(am, bm) }); } bi = reB.lastIndex; } if (bi < b2.length) { bs = b2.slice(bi); if (s2[i2]) s2[i2] += bs; else s2[++i2] = bs; } return s2.length < 2 ? q2[0] ? one(q2[0].x) : zero2(b2) : (b2 = q2.length, function(t4) { for (var i3 = 0, o2; i3 < b2; ++i3) s2[(o2 = q2[i3]).i] = o2.x(t4); return s2.join(""); }); } var reA, reB; var init_string = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/d3-interpolate/src/value.js function value_default(a2, b2) { var t4 = typeof b2, c3; return b2 == null || t4 === "boolean" ? constant_default2(b2) : (t4 === "number" ? number_default : t4 === "string" ? (c3 = color(b2)) ? (b2 = c3, rgb_default2) : string_default : b2 instanceof color ? rgb_default2 : b2 instanceof Date ? date_default : isNumberArray(b2) ? numberArray_default : Array.isArray(b2) ? genericArray : typeof b2.valueOf !== "function" && typeof b2.toString !== "function" || isNaN(b2) ? object_default : number_default)(a2, b2); } var init_value = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/d3-interpolate/src/round.js function round_default(a2, b2) { return a2 = +a2, b2 = +b2, function(t4) { return Math.round(a2 * (1 - t4) + b2 * t4); }; } var init_round = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-interpolate/src/round.js"() { "use strict"; __name(round_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-interpolate/src/transform/decompose.js function decompose_default(a2, b2, c3, d2, e3, f3) { var scaleX, scaleY, skewX; if (scaleX = Math.sqrt(a2 * a2 + b2 * b2)) a2 /= scaleX, b2 /= scaleX; if (skewX = a2 * c3 + b2 * d2) c3 -= a2 * skewX, d2 -= b2 * skewX; if (scaleY = Math.sqrt(c3 * c3 + d2 * d2)) c3 /= scaleY, d2 /= scaleY, skewX /= scaleY; if (a2 * d2 < b2 * c3) a2 = -a2, b2 = -b2, skewX = -skewX, scaleX = -scaleX; return { translateX: e3, translateY: f3, rotate: Math.atan2(b2, a2) * degrees2, skewX: Math.atan(skewX) * degrees2, scaleX, scaleY }; } var degrees2, identity; var init_decompose = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/d3-interpolate/src/transform/parse.js function parseCss(value2) { const m2 = new (typeof DOMMatrix === "function" ? DOMMatrix : WebKitCSSMatrix)(value2 + ""); return m2.isIdentity ? identity : decompose_default(m2.a, m2.b, m2.c, m2.d, m2.e, m2.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/[email protected]/node_modules/d3-interpolate/src/transform/parse.js"() { "use strict"; init_decompose(); __name(parseCss, "parseCss"); __name(parseSvg, "parseSvg"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-interpolate/src/transform/index.js function interpolateTransform(parse8, pxComma, pxParen, degParen) { function pop(s2) { return s2.length ? s2.pop() + " " : ""; } __name(pop, "pop"); function translate(xa, ya, xb, yb, s2, q2) { if (xa !== xb || ya !== yb) { var i2 = s2.push("translate(", null, pxComma, null, pxParen); q2.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(translate, "translate"); function rotate(a2, b2, s2, q2) { if (a2 !== b2) { if (a2 - b2 > 180) b2 += 360; else if (b2 - a2 > 180) a2 += 360; q2.push({ i: s2.push(pop(s2) + "rotate(", null, degParen) - 2, x: number_default(a2, b2) }); } else if (b2) { s2.push(pop(s2) + "rotate(" + b2 + degParen); } } __name(rotate, "rotate"); function skewX(a2, b2, s2, q2) { if (a2 !== b2) { q2.push({ i: s2.push(pop(s2) + "skewX(", null, degParen) - 2, x: number_default(a2, b2) }); } else if (b2) { s2.push(pop(s2) + "skewX(" + b2 + degParen); } } __name(skewX, "skewX"); function scale(xa, ya, xb, yb, s2, q2) { if (xa !== xb || ya !== yb) { var i2 = s2.push(pop(s2) + "scale(", null, ",", null, ")"); q2.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(scale, "scale"); return function(a2, b2) { var s2 = [], q2 = []; a2 = parse8(a2), b2 = parse8(b2); translate(a2.translateX, a2.translateY, b2.translateX, b2.translateY, s2, q2); rotate(a2.rotate, b2.rotate, s2, q2); skewX(a2.skewX, b2.skewX, s2, q2); scale(a2.scaleX, a2.scaleY, b2.scaleX, b2.scaleY, s2, q2); a2 = b2 = null; return function(t4) { var i2 = -1, n2 = q2.length, o2; while (++i2 < n2) s2[(o2 = q2[i2]).i] = o2.x(t4); return s2.join(""); }; }; } var interpolateTransformCss, interpolateTransformSvg; var init_transform = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/d3-interpolate/src/hcl.js function hcl2(hue2) { return function(start3, end2) { var h2 = hue2((start3 = hcl(start3)).h, (end2 = hcl(end2)).h), c3 = nogamma(start3.c, end2.c), l2 = nogamma(start3.l, end2.l), opacity = nogamma(start3.opacity, end2.opacity); return function(t4) { start3.h = h2(t4); start3.c = c3(t4); start3.l = l2(t4); start3.opacity = opacity(t4); return start3 + ""; }; }; } var hcl_default, hclLong; var init_hcl = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/d3-interpolate/src/index.js var init_src8 = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/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 now4 = clock.now(), delay2 = now4 - clockLast; if (delay2 > pokeDelay) clockSkew -= delay2, clockLast = now4; } 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/[email protected]/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(f3) { setTimeout(f3, 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/[email protected]/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/[email protected]/node_modules/d3-timer/src/timeout.js"() { "use strict"; init_timer(); __name(timeout_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-timer/src/index.js var init_src9 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-timer/src/index.js"() { "use strict"; init_timer(); init_timeout(); } }); // ../../node_modules/.pnpm/[email protected][email protected]/node_modules/d3-transition/src/transition/schedule.js function schedule_default(node2, name, id28, index, group2, timing) { var schedules = node2.__transition; if (!schedules) node2.__transition = {}; else if (id28 in schedules) return; create(node2, id28, { 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, id28) { var schedule = get2(node2, id28); if (schedule.state > CREATED) throw new Error("too late; already scheduled"); return schedule; } function set2(node2, id28) { var schedule = get2(node2, id28); if (schedule.state > STARTED) throw new Error("too late; already running"); return schedule; } function get2(node2, id28) { var schedule = node2.__transition; if (!schedule || !(schedule = schedule[id28])) throw new Error("transition not found"); return schedule; } function create(node2, id28, self2) { var schedules = node2.__transition, tween; schedules[id28] = 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, j2, 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 < id28) { 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, j2 = -1; i2 < n2; ++i2) { if (o2 = self2.tween[i2].value.call(node2, node2.__data__, self2.index, self2.group)) { tween[++j2] = o2; } } tween.length = j2 + 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[id28]; 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/[email protected][email protected]/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(create, "create"); } }); // ../../node_modules/.pnpm/[email protected][email protected]/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/[email protected][email protected]/node_modules/d3-transition/src/interrupt.js"() { "use strict"; init_schedule(); __name(interrupt_default, "default"); } }); // ../../node_modules/.pnpm/[email protected][email protected]/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/[email protected][email protected]/node_modules/d3-transition/src/selection/interrupt.js"() { "use strict"; init_interrupt(); __name(interrupt_default2, "default"); } }); // ../../node_modules/.pnpm/[email protected][email protected]/node_modules/d3-transition/src/transition/tween.js function tweenRemove(id28, name) { var tween0, tween1; return function() { var schedule = set2(this, id28), 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(id28, name, value2) { var tween0, tween1; if (typeof value2 !== "function") throw new Error(); return function() { var schedule = set2(this, id28), 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 id28 = this._id; name += ""; if (arguments.length < 2) { var tween = get2(this.node(), id28).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)(id28, name, value2)); } function tweenValue(transition2, name, value2) { var id28 = transition2._id; transition2.each(function() { var schedule = set2(this, id28); (schedule.value || (schedule.value = {}))[name] = value2.apply(this, arguments); }); return function(node2) { return get2(node2, id28).value[name]; }; } var init_tween = __esm({ "../../node_modules/.pnpm/[email protected][email protected]/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/[email protected][email protected]/node_modules/d3-transition/src/transition/interpolate.js function interpolate_default(a2, b2) { var c3; return (typeof b2 === "number" ? number_default : b2 instanceof color ? rgb_default2 : (c3 = color(b2)) ? (b2 = c3, rgb_default2) : string_default)(a2, b2); } var init_interpolate = __esm({ "../../node_modules/.pnpm/[email protected][email protected]/node_modules/d3-transition/src/transition/interpolate.js"() { "use strict"; init_src7(); init_src8(); __name(interpolate_default, "default"); } }); // ../../node_modules/.pnpm/[email protected][email protected]/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/[email protected][email protected]/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/[email protected][email protected]/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/[email protected][email protected]/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/[email protected][email protected]/node_modules/d3-transition/src/transition/delay.js function delayFunction(id28, value2) { return function() { init(this, id28).delay = +value2.apply(this, arguments); }; } function delayConstant(id28, value2) { return value2 = +value2, function() { init(this, id28).delay = value2; }; } function delay_default(value2) { var id28 = this._id; return arguments.length ? this.each((typeof value2 === "function" ? delayFunction : delayConstant)(id28, value2)) : get2(this.node(), id28).delay; } var init_delay = __esm({ "../../node_modules/.pnpm/[email protected][email protected]/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/[email protected][email protected]/node_modules/d3-transition/src/transition/duration.js function durationFunction(id28, value2) { return function() { set2(this, id28).duration = +value2.apply(this, arguments); }; } function durationConstant(id28, value2) { return value2 = +value2, function() { set2(this, id28).duration = value2; }; } function duration_default(value2) { var id28 = this._id; return arguments.length ? this.each((typeof value2 === "function" ? durationFunction : durationConstant)(id28, value2)) : get2(this.node(), id28).duration; } var init_duration = __esm({ "../../node_modules/.pnpm/[email protected][email protected]/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/[email protected][email protected]/node_modules/d3-transition/src/transition/ease.js function easeConstant(id28, value2) { if (typeof value2 !== "function") throw new Error(); return function() { set2(this, id28).ease = value2; }; } function ease_default(value2) { var id28 = this._id; return arguments.length ? this.each(easeConstant(id28, value2)) : get2(this.node(), id28).ease; } var init_ease = __esm({ "../../node_modules/.pnpm/[email protected][email protected]/node_modules/d3-transition/src/transition/ease.js"() { "use strict"; init_schedule(); __name(easeConstant, "easeConstant"); __name(ease_default, "default"); } }); // ../../node_modules/.pnpm/[email protected][email protected]/node_modules/d3-transition/src/transition/easeVarying.js function easeVarying(id28, value2) { return function() { var v3 = value2.apply(this, arguments); if (typeof v3 !== "function") throw new Error(); set2(this, id28).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/[email protected][email protected]/node_modules/d3-transition/src/transition/easeVarying.js"() { "use strict"; init_schedule(); __name(easeVarying, "easeVarying"); __name(easeVarying_default, "default"); } }); // ../../node_modules/.pnpm/[email protected][email protected]/node_modules/d3-transition/src/transition/filter.js function filter_default2(match2) { if (typeof match2 !== "function") match2 = matcher_default(match2); for (var groups = this._groups, m2 = groups.length, subgroups = new Array(m2), j2 = 0; j2 < m2; ++j2) { for (var group2 = groups[j2], n2 = group2.length, subgroup = subgroups[j2] = [], node2, i2 = 0; i2 < n2; ++i2) { if ((node2 = group2[i2]) && match2.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/[email protected][email protected]/node_modules/d3-transition/src/transition/filter.js"() { "use strict"; init_src5(); init_transition2(); __name(filter_default2, "default"); } }); // ../../node_modules/.pnpm/[email protected][email protected]/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, m2 = Math.min(m0, m1), merges = new Array(m0), j2 = 0; j2 < m2; ++j2) { for (var group0 = groups0[j2], group1 = groups1[j2], n2 = group0.length, merge5 = merges[j2] = new Array(n2), node2, i2 = 0; i2 < n2; ++i2) { if (node2 = group0[i2] || group1[i2]) { merge5[i2] = node2; } } } for (; j2 < m0; ++j2) { merges[j2] = groups0[j2]; } return new Transition(merges, this._parents, this._name, this._id); } var init_merge3 = __esm({ "../../node_modules/.pnpm/[email protected][email protected]/node_modules/d3-transition/src/transition/merge.js"() { "use strict"; init_transition2(); __name(merge_default2, "default"); } }); // ../../node_modules/.pnpm/[email protected][email protected]/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(id28, name, listener) { var on0, on1, sit = start(name) ? init : set2; return function() { var schedule = sit(this, id28), on3 = schedule.on; if (on3 !== on0) (on1 = (on0 = on3).copy()).on(name, listener); schedule.on = on1; }; } function on_default2(name, listener) { var id28 = this._id; return arguments.length < 2 ? get2(this.node(), id28).on.on(name) : this.each(onFunction(id28, name, listener)); } var init_on2 = __esm({ "../../node_modules/.pnpm/[email protected][email protected]/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/[email protected][email protected]/node_modules/d3-transition/src/transition/remove.js function removeFunction(id28) { return function() { var parent4 = this.parentNode; for (var i2 in this.__transition) if (+i2 !== id28) return; if (parent4) parent4.removeChild(this); }; } function remove_default2() { return this.on("end.remove", removeFunction(this._id)); } var init_remove2 = __esm({ "../../node_modules/.pnpm/[email protected][email protected]/node_modules/d3-transition/src/transition/remove.js"() { "use strict"; __name(removeFunction, "removeFunction"); __name(remove_default2, "default"); } }); // ../../node_modules/.pnpm/[email protected][email protected]/node_modules/d3-transition/src/transition/select.js function select_default3(select) { var name = this._name, id28 = this._id; if (typeof select !== "function") select = selector_default(select); for (var groups = this._groups, m2 = groups.length, subgroups = new Array(m2), j2 = 0; j2 < m2; ++j2) { for (var group2 = groups[j2], n2 = group2.length, subgroup = subgroups[j2] = 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, id28, i2, subgroup, get2(node2, id28)); } } } return new Transition(subgroups, this._parents, name, id28); } var init_select3 = __esm({ "../../node_modules/.pnpm/[email protected][email protected]/node_modules/d3-transition/src/transition/select.js"() { "use strict"; init_src5(); init_transition2(); init_schedule(); __name(select_default3, "default"); } }); // ../../node_modules/.pnpm/[email protected][email protected]/node_modules/d3-transition/src/transition/selectAll.js function selectAll_default2(select) { var name = this._name, id28 = this._id; if (typeof select !== "function") select = selectorAll_default(select); for (var groups = this._groups, m2 = groups.length, subgroups = [], parents3 = [], j2 = 0; j2 < m2; ++j2) { for (var group2 = groups[j2], 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, id28), k2 = 0, l2 = children2.length; k2 < l2; ++k2) { if (child = children2[k2]) { schedule_default(child, name, id28, k2, children2, inherit2); } } subgroups.push(children2); parents3.push(node2); } } } return new Transition(subgroups, parents3, name, id28); } var init_selectAll2 = __esm({ "../../node_modules/.pnpm/[email protected][email protected]/node_modules/d3-transition/src/transition/selectAll.js"() { "use strict"; init_src5(); init_transition2(); init_schedule(); __name(selectAll_default2, "default"); } }); // ../../node_modules/.pnpm/[email protected][email protected]/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/[email protected][email protected]/node_modules/d3-transition/src/transition/selection.js"() { "use strict"; init_src5(); Selection2 = selection_default.prototype.constructor; __name(selection_default2, "default"); } }); // ../../node_modules/.pnpm/[email protected][email protected]/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(id28, name) { var on0, on1, listener0, key = "style." + name, event3 = "end." + key, remove3; return function() { var schedule = set2(this, id28), 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/[email protected][email protected]/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/[email protected][email protected]/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/[email protected][email protected]/node_modules/d3-transition/src/transition/styleTween.js"() { "use strict"; __name(styleInterpolate, "styleInterpolate"); __name(styleTween, "styleTween"); __name(styleTween_default, "default"); } }); // ../../node_modules/.pnpm/[email protected][email protected]/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/[email protected][email protected]/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/[email protected][email protected]/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/[email protected][email protected]/node_modules/d3-transition/src/transition/textTween.js"() { "use strict"; __name(textInterpolate, "textInterpolate"); __name(textTween, "textTween"); __name(textTween_default, "default"); } }); // ../../node_modules/.pnpm/[email protected][email protected]/node_modules/d3-transition/src/transition/transition.js function transition_default() { var name = this._name, id0 = this._id, id1 = newId(); for (var groups = this._groups, m2 = groups.length, j2 = 0; j2 < m2; ++j2) { for (var group2 = groups[j2], 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/[email protected][email protected]/node_modules/d3-transition/src/transition/transition.js"() { "use strict"; init_transition2(); init_schedule(); __name(transition_default, "default"); } }); // ../../node_modules/.pnpm/[email protected][email protected]/node_modules/d3-transition/src/transition/end.js function end_default() { var on0, on1, that = this, id28 = that._id, size5 = that.size(); return new Promise(function(resolve3, reject3) { var cancel = { value: reject3 }, end2 = { value: /* @__PURE__ */ __name(function() { if (--size5 === 0) resolve3(); }, "value") }; that.each(function() { var schedule = set2(this, id28), 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 (size5 === 0) resolve3(); }); } var init_end = __esm({ "../../node_modules/.pnpm/[email protected][email protected]/node_modules/d3-transition/src/transition/end.js"() { "use strict"; init_schedule(); __name(end_default, "default"); } }); // ../../node_modules/.pnpm/[email protected][email protected]/node_modules/d3-transition/src/transition/index.js function Transition(groups, parents3, name, id28) { this._groups = groups; this._parents = parents3; this._name = name; this._id = id28; } function transition(name) { return selection_default().transition(name); } function newId() { return ++id; } var id, selection_prototype; var init_transition2 = __esm({ "../../node_modules/.pnpm/[email protected][email protected]/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/[email protected]/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/[email protected]/node_modules/d3-ease/src/cubic.js"() { "use strict"; __name(cubicInOut, "cubicInOut"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-ease/src/index.js var init_src10 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-ease/src/index.js"() { "use strict"; init_cubic(); } }); // ../../node_modules/.pnpm/[email protected][email protected]/node_modules/d3-transition/src/selection/transition.js function inherit(node2, id28) { var timing; while (!(timing = node2.__transition) || !(timing = timing[id28])) { if (!(node2 = node2.parentNode)) { throw new Error(`transition ${id28} not found`); } } return timing; } function transition_default2(name) { var id28, timing; if (name instanceof Transition) { id28 = name._id, name = name._name; } else { id28 = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + ""; } for (var groups = this._groups, m2 = groups.length, j2 = 0; j2 < m2; ++j2) { for (var group2 = groups[j2], n2 = group2.length, node2, i2 = 0; i2 < n2; ++i2) { if (node2 = group2[i2]) { schedule_default(node2, name, id28, i2, group2, timing || inherit(node2, id28)); } } } return new Transition(groups, this._parents, name, id28); } var defaultTiming; var init_transition3 = __esm({ "../../node_modules/.pnpm/[email protected][email protected]/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/[email protected][email protected]/node_modules/d3-transition/src/selection/index.js var init_selection3 = __esm({ "../../node_modules/.pnpm/[email protected][email protected]/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/[email protected][email protected]/node_modules/d3-transition/src/index.js var init_src11 = __esm({ "../../node_modules/.pnpm/[email protected][email protected]/node_modules/d3-transition/src/index.js"() { "use strict"; init_selection3(); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-brush/src/constant.js var init_constant3 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-brush/src/constant.js"() { "use strict"; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-brush/src/event.js var init_event = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-brush/src/event.js"() { "use strict"; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-brush/src/noevent.js var init_noevent = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-brush/src/noevent.js"() { "use strict"; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/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(y5, e3) { return y5 == null ? null : [[e3[0][0], +y5[0]], [e3[1][0], +y5[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/[email protected]/node_modules/d3-brush/src/index.js var init_src12 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-brush/src/index.js"() { "use strict"; init_brush(); } }); // ../../node_modules/.pnpm/[email protected]/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 d2 = Math.floor(digits); if (!(d2 >= 0)) throw new Error(`invalid digits: ${digits}`); if (d2 > 15) return append; const k2 = 10 ** d2; 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/[email protected]/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, y5) { this._append`M${this._x0 = this._x1 = +x5},${this._y0 = this._y1 = +y5}`; } closePath() { if (this._x1 !== null) { this._x1 = this._x0, this._y1 = this._y0; this._append`Z`; } } lineTo(x5, y5) { this._append`L${this._x1 = +x5},${this._y1 = +y5}`; } quadraticCurveTo(x1, y1, x5, y5) { this._append`Q${+x1},${+y1},${this._x1 = +x5},${this._y1 = +y5}`; } bezierCurveTo(x1, y1, x22, y22, x5, y5) { this._append`C${+x1},${+y1},${+x22},${+y22},${this._x1 = +x5},${this._y1 = +y5}`; } 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), l2 = r2 * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2), t01 = l2 / l01, t21 = l2 / 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, y5, r2, a0, a1, ccw) { x5 = +x5, y5 = +y5, 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 = y5 + 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},${y5 - 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 = y5 + r2 * Math.sin(a1)}`; } } rect(x5, y5, w3, h2) { this._append`M${this._x0 = this._x1 = +x5},${this._y0 = this._y1 = +y5}h${w3 = +w3}v${+h2}h${-w3}Z`; } toString() { return this._; } }; __name(path2, "path"); path2.prototype = Path.prototype; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-path/src/index.js var init_src13 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-path/src/index.js"() { "use strict"; init_path(); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-chord/src/index.js var init_src14 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-chord/src/index.js"() { "use strict"; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-contour/src/index.js var init_src15 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-contour/src/index.js"() { "use strict"; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-delaunay/src/index.js var init_src16 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-delaunay/src/index.js"() { "use strict"; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-dsv/src/index.js var init_src17 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-dsv/src/index.js"() { "use strict"; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-fetch/src/index.js var init_src18 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-fetch/src/index.js"() { "use strict"; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-quadtree/src/index.js var init_src19 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-quadtree/src/index.js"() { "use strict"; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-force/src/index.js var init_src20 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-force/src/index.js"() { "use strict"; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/d3-format/src/formatDecimal.js"() { "use strict"; __name(formatDecimal_default, "default"); __name(formatDecimalParts, "formatDecimalParts"); } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/d3-format/src/exponent.js"() { "use strict"; init_formatDecimal(); __name(exponent_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-format/src/formatGroup.js function formatGroup_default(grouping, thousands) { return function(value2, width3) { var i2 = value2.length, t4 = [], j2 = 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[j2 = (j2 + 1) % grouping.length]; } return t4.reverse().join(thousands); }; } var init_formatGroup = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-format/src/formatGroup.js"() { "use strict"; __name(formatGroup_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/d3-format/src/formatNumerals.js"() { "use strict"; __name(formatNumerals_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-format/src/formatSpecifier.js function formatSpecifier(specifier) { if (!(match2 = re.exec(specifier))) throw new Error("invalid format: " + specifier); var match2; return new FormatSpecifier({ fill: match2[1], align: match2[2], sign: match2[3], symbol: match2[4], zero: match2[5], width: match2[6], comma: match2[7], precision: match2[8] && match2[8].slice(1), trim: match2[9], type: match2[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/[email protected]/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/[email protected]/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/[email protected]/node_modules/d3-format/src/formatTrim.js"() { "use strict"; __name(formatTrim_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-format/src/formatPrefixAuto.js function formatPrefixAuto_default(x5, p3) { var d2 = formatDecimalParts(x5, p3); if (!d2) return x5 + ""; var coefficient = d2[0], exponent = d2[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/[email protected]/node_modules/d3-format/src/formatPrefixAuto.js"() { "use strict"; init_formatDecimal(); __name(formatPrefixAuto_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-format/src/formatRounded.js function formatRounded_default(x5, p3) { var d2 = formatDecimalParts(x5, p3); if (!d2) return x5 + ""; var coefficient = d2[0], exponent = d2[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/[email protected]/node_modules/d3-format/src/formatRounded.js"() { "use strict"; init_formatDecimal(); __name(formatRounded_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-format/src/formatTypes.js var formatTypes_default; var init_formatTypes = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/d3-format/src/identity.js function identity_default2(x5) { return x5; } var init_identity2 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-format/src/identity.js"() { "use strict"; __name(identity_default2, "default"); } }); // ../../node_modules/.pnpm/[email protected]/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, padding2 = length2 < width3 ? new Array(width3 - length2 + 1).join(fill) : ""; if (comma && zero3) value2 = group2(padding2 + value2, padding2.length ? width3 - valueSuffix.length : Infinity), padding2 = ""; switch (align) { case "<": value2 = valuePrefix + value2 + valueSuffix + padding2; break; case "=": value2 = valuePrefix + padding2 + value2 + valueSuffix; break; case "^": value2 = padding2.slice(0, length2 = padding2.length >> 1) + valuePrefix + value2 + valueSuffix + padding2.slice(length2); break; default: value2 = padding2 + 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 f3 = 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 f3(k2 * value3) + prefix; }; } __name(formatPrefix2, "formatPrefix"); return { format: newFormat, formatPrefix: formatPrefix2 }; } var map, prefixes; var init_locale = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/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/[email protected]/node_modules/d3-format/src/defaultLocale.js"() { "use strict"; init_locale(); defaultLocale({ thousands: ",", grouping: [3], currency: ["$", ""] }); __name(defaultLocale, "defaultLocale"); } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/d3-format/src/precisionFixed.js"() { "use strict"; init_exponent(); __name(precisionFixed_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/d3-format/src/precisionPrefix.js"() { "use strict"; init_exponent(); __name(precisionPrefix_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/d3-format/src/precisionRound.js"() { "use strict"; init_exponent(); __name(precisionRound_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-format/src/index.js var init_src21 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-format/src/index.js"() { "use strict"; init_defaultLocale(); init_formatSpecifier(); init_precisionFixed(); init_precisionPrefix(); init_precisionRound(); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-geo/src/index.js var init_src22 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-geo/src/index.js"() { "use strict"; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-hierarchy/src/index.js var init_src23 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-hierarchy/src/index.js"() { "use strict"; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-polygon/src/index.js var init_src24 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-polygon/src/index.js"() { "use strict"; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-random/src/index.js var init_src25 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-random/src/index.js"() { "use strict"; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/d3-scale/src/init.js"() { "use strict"; __name(initRange, "initRange"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-scale/src/ordinal.js function ordinal() { var index = new InternMap(), domain = [], range3 = [], unknown = implicit; function scale(d2) { let i2 = index.get(d2); if (i2 === void 0) { if (unknown !== implicit) return unknown; index.set(d2, i2 = domain.push(d2) - 1); } return range3[i2 % range3.length]; } __name(scale, "scale"); scale.domain = function(_2) { if (!arguments.length) return domain.slice(); domain = [], index = new InternMap(); for (const value2 of _2) { if (index.has(value2)) continue; index.set(value2, domain.push(value2) - 1); } return scale; }; scale.range = function(_2) { return arguments.length ? (range3 = Array.from(_2), scale) : range3.slice(); }; scale.unknown = function(_2) { return arguments.length ? (unknown = _2, scale) : unknown; }; scale.copy = function() { return ordinal(domain, range3).unknown(unknown); }; initRange.apply(scale, arguments); return scale; } var implicit; var init_ordinal = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-scale/src/ordinal.js"() { "use strict"; init_src2(); init_init(); implicit = Symbol("implicit"); __name(ordinal, "ordinal"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-scale/src/band.js function band() { var scale = ordinal().unknown(void 0), domain = scale.domain, ordinalRange = scale.range, r0 = 0, r1 = 1, step3, bandwidth, round = false, paddingInner = 0, paddingOuter = 0, align = 0.5; delete scale.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 values2 = range(n2).map(function(i2) { return start3 + step3 * i2; }); return ordinalRange(reverse2 ? values2.reverse() : values2); } __name(rescale, "rescale"); scale.domain = function(_2) { return arguments.length ? (domain(_2), rescale()) : domain(); }; scale.range = function(_2) { return arguments.length ? ([r0, r1] = _2, r0 = +r0, r1 = +r1, rescale()) : [r0, r1]; }; scale.rangeRound = function(_2) { return [r0, r1] = _2, r0 = +r0, r1 = +r1, round = true, rescale(); }; scale.bandwidth = function() { return bandwidth; }; scale.step = function() { return step3; }; scale.round = function(_2) { return arguments.length ? (round = !!_2, rescale()) : round; }; scale.padding = function(_2) { return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_2), rescale()) : paddingInner; }; scale.paddingInner = function(_2) { return arguments.length ? (paddingInner = Math.min(1, _2), rescale()) : paddingInner; }; scale.paddingOuter = function(_2) { return arguments.length ? (paddingOuter = +_2, rescale()) : paddingOuter; }; scale.align = function(_2) { return arguments.length ? (align = Math.max(0, Math.min(1, _2)), rescale()) : align; }; scale.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/[email protected]/node_modules/d3-scale/src/band.js"() { "use strict"; init_src2(); init_init(); init_ordinal(); __name(band, "band"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-scale/src/constant.js function constants(x5) { return function() { return x5; }; } var init_constant4 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-scale/src/constant.js"() { "use strict"; __name(constants, "constants"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-scale/src/number.js function number3(x5) { return +x5; } var init_number3 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-scale/src/number.js"() { "use strict"; __name(number3, "number"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-scale/src/continuous.js function identity2(x5) { return x5; } function normalize(a2, b2) { return (b2 -= a2 = +a2) ? function(x5) { return (x5 - a2) / b2; } : constants(isNaN(b2) ? NaN : 0.5); } function clamper(a2, b2) { var t4; if (a2 > b2) t4 = a2, a2 = b2, b2 = t4; return function(x5) { return Math.max(a2, Math.min(b2, 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 j2 = Math.min(domain.length, range3.length) - 1, d2 = new Array(j2), r2 = new Array(j2), i2 = -1; if (domain[j2] < domain[0]) { domain = domain.slice().reverse(); range3 = range3.slice().reverse(); } while (++i2 < j2) { d2[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, j2) - 1; return r2[i3](d2[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, clamp = identity2, piecewise, output2, input; function rescale() { var n2 = Math.min(domain.length, range3.length); if (clamp !== identity2) clamp = clamper(domain[0], domain[n2 - 1]); piecewise = n2 > 2 ? polymap : bimap; output2 = input = null; return scale; } __name(rescale, "rescale"); function scale(x5) { return x5 == null || isNaN(x5 = +x5) ? unknown : (output2 || (output2 = piecewise(domain.map(transform8), range3, interpolate)))(transform8(clamp(x5))); } __name(scale, "scale"); scale.invert = function(y5) { return clamp(untransform((input || (input = piecewise(range3, domain.map(transform8), number_default)))(y5))); }; scale.domain = function(_2) { return arguments.length ? (domain = Array.from(_2, number3), rescale()) : domain.slice(); }; scale.range = function(_2) { return arguments.length ? (range3 = Array.from(_2), rescale()) : range3.slice(); }; scale.rangeRound = function(_2) { return range3 = Array.from(_2), interpolate = round_default, rescale(); }; scale.clamp = function(_2) { return arguments.length ? (clamp = _2 ? true : identity2, rescale()) : clamp !== identity2; }; scale.interpolate = function(_2) { return arguments.length ? (interpolate = _2, rescale()) : interpolate; }; scale.unknown = function(_2) { return arguments.length ? (unknown = _2, scale) : 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/[email protected]/node_modules/d3-scale/src/continuous.js"() { "use strict"; init_src2(); init_src8(); init_constant4(); 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/[email protected]/node_modules/d3-scale/src/tickFormat.js function tickFormat(start3, stop5, count, specifier) { var step3 = tickStep(start3, stop5, count), 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/[email protected]/node_modules/d3-scale/src/tickFormat.js"() { "use strict"; init_src2(); init_src21(); __name(tickFormat, "tickFormat"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-scale/src/linear.js function linearish(scale) { var domain = scale.domain; scale.ticks = function(count) { var d2 = domain(); return ticks(d2[0], d2[d2.length - 1], count == null ? 10 : count); }; scale.tickFormat = function(count, specifier) { var d2 = domain(); return tickFormat(d2[0], d2[d2.length - 1], count == null ? 10 : count, specifier); }; scale.nice = function(count) { if (count == null) count = 10; var d2 = domain(); var i0 = 0; var i1 = d2.length - 1; var start3 = d2[i0]; var stop5 = d2[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, count); if (step3 === prestep) { d2[i0] = start3; d2[i1] = stop5; return domain(d2); } 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 scale; }; return scale; } function linear2() { var scale = continuous(); scale.copy = function() { return copy(scale, linear2()); }; initRange.apply(scale, arguments); return linearish(scale); } var init_linear = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/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/[email protected]/node_modules/d3-scale/src/nice.js"() { "use strict"; __name(nice, "nice"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-time/src/interval.js function timeInterval(floori, offseti, count, 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 (count) { interval2.count = (start3, end2) => { t02.setTime(+start3), t12.setTime(+end2); floori(t02), floori(t12); return Math.floor(count(t02, t12)); }; interval2.every = (step3) => { step3 = Math.floor(step3); return !isFinite(step3) || !(step3 > 0) ? null : !(step3 > 1) ? interval2 : interval2.filter(field ? (d2) => field(d2) % step3 === 0 : (d2) => interval2.count(0, d2) % step3 === 0); }; } return interval2; } var t02, t12; var init_interval = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-time/src/interval.js"() { "use strict"; t02 = /* @__PURE__ */ new Date(); t12 = /* @__PURE__ */ new Date(); __name(timeInterval, "timeInterval"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-time/src/millisecond.js var millisecond, milliseconds; var init_millisecond = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/d3-time/src/duration.js var durationSecond, durationMinute, durationHour, durationDay, durationWeek, durationMonth, durationYear; var init_duration2 = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/d3-time/src/second.js var second, seconds; var init_second = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/d3-time/src/minute.js var timeMinute, timeMinutes, utcMinute, utcMinutes; var init_minute = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/d3-time/src/hour.js var timeHour, timeHours, utcHour, utcHours; var init_hour = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/d3-time/src/day.js var timeDay, timeDays, utcDay, utcDays, unixDay, unixDays; var init_day = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/node_modules/d3-time/src/month.js var timeMonth, timeMonths, utcMonth, utcMonths; var init_month = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/d3-time/src/year.js var timeYear, timeYears, utcYear, utcYears; var init_year = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/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, count) { const reverse2 = stop5 < start3; if (reverse2) [start3, stop5] = [stop5, start3]; const interval2 = count && typeof count.range === "function" ? count : tickInterval2(start3, stop5, count); const ticks3 = interval2 ? interval2.range(start3, +stop5 + 1) : []; return reverse2 ? ticks3.reverse() : ticks3; } __name(ticks2, "ticks"); function tickInterval2(start3, stop5, count) { const target = Math.abs(stop5 - start3) / count; const i2 = bisector(([, , step4]) => step4).right(tickIntervals, target); if (i2 === tickIntervals.length) return year.every(tickStep(start3 / durationYear, stop5 / durationYear, count)); if (i2 === 0) return millisecond.every(Math.max(tickStep(start3, stop5, count), 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/[email protected]/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/[email protected]/node_modules/d3-time/src/index.js var init_src26 = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/d3-time-format/src/locale.js function localDate(d2) { if (0 <= d2.y && d2.y < 100) { var date2 = new Date(-1, d2.m, d2.d, d2.H, d2.M, d2.S, d2.L); date2.setFullYear(d2.y); return date2; } return new Date(d2.y, d2.m, d2.d, d2.H, d2.M, d2.S, d2.L); } function utcDate(d2) { if (0 <= d2.y && d2.y < 100) { var date2 = new Date(Date.UTC(-1, d2.m, d2.d, d2.H, d2.M, d2.S, d2.L)); date2.setUTCFullYear(d2.y); return date2; } return new Date(Date.UTC(d2.y, d2.m, d2.d, d2.H, d2.M, d2.S, d2.L)); } function newDate(y5, m2, d2) { return { y: y5, m: m2, d: d2, 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, j2 = 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(j2, 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); j2 = i2 + 1; } } string3.push(specifier.slice(j2, i2)); return string3.join(""); }; } __name(newFormat, "newFormat"); function newParse(specifier, Z2) { return function(string3) { var d2 = newDate(1900, void 0, 1), i2 = parseSpecifier(d2, specifier, string3 += "", 0), week, day; if (i2 != string3.length) return null; if ("Q" in d2) return new Date(d2.Q); if ("s" in d2) return new Date(d2.s * 1e3 + ("L" in d2 ? d2.L : 0)); if (Z2 && !("Z" in d2)) d2.Z = 0; if ("p" in d2) d2.H = d2.H % 12 + d2.p * 12; if (d2.m === void 0) d2.m = "q" in d2 ? d2.q : 0; if ("V" in d2) { if (d2.V < 1 || d2.V > 53) return null; if (!("w" in d2)) d2.w = 1; if ("Z" in d2) { week = utcDate(newDate(d2.y, 0, 1)), day = week.getUTCDay(); week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week); week = utcDay.offset(week, (d2.V - 1) * 7); d2.y = week.getUTCFullYear(); d2.m = week.getUTCMonth(); d2.d = week.getUTCDate() + (d2.w + 6) % 7; } else { week = localDate(newDate(d2.y, 0, 1)), day = week.getDay(); week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week); week = timeDay.offset(week, (d2.V - 1) * 7); d2.y = week.getFullYear(); d2.m = week.getMonth(); d2.d = week.getDate() + (d2.w + 6) % 7; } } else if ("W" in d2 || "U" in d2) { if (!("w" in d2)) d2.w = "u" in d2 ? d2.u % 7 : "W" in d2 ? 1 : 0; day = "Z" in d2 ? utcDate(newDate(d2.y, 0, 1)).getUTCDay() : localDate(newDate(d2.y, 0, 1)).getDay(); d2.m = 0; d2.d = "W" in d2 ? (d2.w + 6) % 7 + d2.W * 7 - (day + 5) % 7 : d2.w + d2.U * 7 - (day + 6) % 7; } if ("Z" in d2) { d2.H += d2.Z / 100 | 0; d2.M += d2.Z % 100; return utcDate(d2); } return localDate(d2); }; } __name(newParse, "newParse"); function parseSpecifier(d2, specifier, string3, j2) { var i2 = 0, n2 = specifier.length, m2 = string3.length, c3, parse8; while (i2 < n2) { if (j2 >= m2) return -1; c3 = specifier.charCodeAt(i2++); if (c3 === 37) { c3 = specifier.charAt(i2++); parse8 = parses[c3 in pads ? specifier.charAt(i2++) : c3]; if (!parse8 || (j2 = parse8(d2, string3, j2)) < 0) return -1; } else if (c3 != string3.charCodeAt(j2++)) { return -1; } } return j2; } __name(parseSpecifier, "parseSpecifier"); function parsePeriod(d2, string3, i2) { var n2 = periodRe.exec(string3.slice(i2)); return n2 ? (d2.p = periodLookup.get(n2[0].toLowerCase()), i2 + n2[0].length) : -1; } __name(parsePeriod, "parsePeriod"); function parseShortWeekday(d2, string3, i2) { var n2 = shortWeekdayRe.exec(string3.slice(i2)); return n2 ? (d2.w = shortWeekdayLookup.get(n2[0].toLowerCase()), i2 + n2[0].length) : -1; } __name(parseShortWeekday, "parseShortWeekday"); function parseWeekday(d2, string3, i2) { var n2 = weekdayRe.exec(string3.slice(i2)); return n2 ? (d2.w = weekdayLookup.get(n2[0].toLowerCase()), i2 + n2[0].length) : -1; } __name(parseWeekday, "parseWeekday"); function parseShortMonth(d2, string3, i2) { var n2 = shortMonthRe.exec(string3.slice(i2)); return n2 ? (d2.m = shortMonthLookup.get(n2[0].toLowerCase()), i2 + n2[0].length) : -1; } __name(parseShortMonth, "parseShortMonth"); function parseMonth(d2, string3, i2) { var n2 = monthRe.exec(string3.slice(i2)); return n2 ? (d2.m = monthLookup.get(n2[0].toLowerCase()), i2 + n2[0].length) : -1; } __name(parseMonth, "parseMonth"); function parseLocaleDateTime(d2, string3, i2) { return parseSpecifier(d2, locale_dateTime, string3, i2); } __name(parseLocaleDateTime, "parseLocaleDateTime"); function parseLocaleDate(d2, string3, i2) { return parseSpecifier(d2, locale_date, string3, i2); } __name(parseLocaleDate, "parseLocaleDate"); function parseLocaleTime(d2, string3, i2) { return parseSpecifier(d2, locale_time, string3, i2); } __name(parseLocaleTime, "parseLocaleTime"); function formatShortWeekday(d2) { return locale_shortWeekdays[d2.getDay()]; } __name(formatShortWeekday, "formatShortWeekday"); function formatWeekday(d2) { return locale_weekdays[d2.getDay()]; } __name(formatWeekday, "formatWeekday"); function formatShortMonth(d2) { return locale_shortMonths[d2.getMonth()]; } __name(formatShortMonth, "formatShortMonth"); function formatMonth(d2) { return locale_months[d2.getMonth()]; } __name(formatMonth, "formatMonth"); function formatPeriod(d2) { return locale_periods[+(d2.getHours() >= 12)]; } __name(formatPeriod, "formatPeriod"); function formatQuarter(d2) { return 1 + ~~(d2.getMonth() / 3); } __name(formatQuarter, "formatQuarter"); function formatUTCShortWeekday(d2) { return locale_shortWeekdays[d2.getUTCDay()]; } __name(formatUTCShortWeekday, "formatUTCShortWeekday"); function formatUTCWeekday(d2) { return locale_weekdays[d2.getUTCDay()]; } __name(formatUTCWeekday, "formatUTCWeekday"); function formatUTCShortMonth(d2) { return locale_shortMonths[d2.getUTCMonth()]; } __name(formatUTCShortMonth, "formatUTCShortMonth"); function formatUTCMonth(d2) { return locale_months[d2.getUTCMonth()]; } __name(formatUTCMonth, "formatUTCMonth"); function formatUTCPeriod(d2) { return locale_periods[+(d2.getUTCHours() >= 12)]; } __name(formatUTCPeriod, "formatUTCPeriod"); function formatUTCQuarter(d2) { return 1 + ~~(d2.getUTCMonth() / 3); } __name(formatUTCQuarter, "formatUTCQuarter"); return { format: /* @__PURE__ */ __name(function(specifier) { var f3 = newFormat(specifier += "", formats); f3.toString = function() { return specifier; }; return f3; }, "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 f3 = newFormat(specifier += "", utcFormats); f3.toString = function() { return specifier; }; return f3; }, "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(d2, string3, i2) { var n2 = numberRe.exec(string3.slice(i2, i2 + 1)); return n2 ? (d2.w = +n2[0], i2 + n2[0].length) : -1; } function parseWeekdayNumberMonday(d2, string3, i2) { var n2 = numberRe.exec(string3.slice(i2, i2 + 1)); return n2 ? (d2.u = +n2[0], i2 + n2[0].length) : -1; } function parseWeekNumberSunday(d2, string3, i2) { var n2 = numberRe.exec(string3.slice(i2, i2 + 2)); return n2 ? (d2.U = +n2[0], i2 + n2[0].length) : -1; } function parseWeekNumberISO(d2, string3, i2) { var n2 = numberRe.exec(string3.slice(i2, i2 + 2)); return n2 ? (d2.V = +n2[0], i2 + n2[0].length) : -1; } function parseWeekNumberMonday(d2, string3, i2) { var n2 = numberRe.exec(string3.slice(i2, i2 + 2)); return n2 ? (d2.W = +n2[0], i2 + n2[0].length) : -1; } function parseFullYear(d2, string3, i2) { var n2 = numberRe.exec(string3.slice(i2, i2 + 4)); return n2 ? (d2.y = +n2[0], i2 + n2[0].length) : -1; } function parseYear(d2, string3, i2) { var n2 = numberRe.exec(string3.slice(i2, i2 + 2)); return n2 ? (d2.y = +n2[0] + (+n2[0] > 68 ? 1900 : 2e3), i2 + n2[0].length) : -1; } function parseZone(d2, string3, i2) { var n2 = /^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(string3.slice(i2, i2 + 6)); return n2 ? (d2.Z = n2[1] ? 0 : -(n2[2] + (n2[3] || "00")), i2 + n2[0].length) : -1; } function parseQuarter(d2, string3, i2) { var n2 = numberRe.exec(string3.slice(i2, i2 + 1)); return n2 ? (d2.q = n2[0] * 3 - 3, i2 + n2[0].length) : -1; } function parseMonthNumber(d2, string3, i2) { var n2 = numberRe.exec(string3.slice(i2, i2 + 2)); return n2 ? (d2.m = n2[0] - 1, i2 + n2[0].length) : -1; } function parseDayOfMonth(d2, string3, i2) { var n2 = numberRe.exec(string3.slice(i2, i2 + 2)); return n2 ? (d2.d = +n2[0], i2 + n2[0].length) : -1; } function parseDayOfYear(d2, string3, i2) { var n2 = numberRe.exec(string3.slice(i2, i2 + 3)); return n2 ? (d2.m = 0, d2.d = +n2[0], i2 + n2[0].length) : -1; } function parseHour24(d2, string3, i2) { var n2 = numberRe.exec(string3.slice(i2, i2 + 2)); return n2 ? (d2.H = +n2[0], i2 + n2[0].length) : -1; } function parseMinutes(d2, string3, i2) { var n2 = numberRe.exec(string3.slice(i2, i2 + 2)); return n2 ? (d2.M = +n2[0], i2 + n2[0].length) : -1; } function parseSeconds(d2, string3, i2) { var n2 = numberRe.exec(string3.slice(i2, i2 + 2)); return n2 ? (d2.S = +n2[0], i2 + n2[0].length) : -1; } function parseMilliseconds(d2, string3, i2) { var n2 = numberRe.exec(string3.slice(i2, i2 + 3)); return n2 ? (d2.L = +n2[0], i2 + n2[0].length) : -1; } function parseMicroseconds(d2, string3, i2) { var n2 = numberRe.exec(string3.slice(i2, i2 + 6)); return n2 ? (d2.L = Math.floor(n2[0] / 1e3), i2 + n2[0].length) : -1; } function parseLiteralPercent(d2, string3, i2) { var n2 = percentRe.exec(string3.slice(i2, i2 + 1)); return n2 ? i2 + n2[0].length : -1; } function parseUnixTimestamp(d2, string3, i2) { var n2 = numberRe.exec(string3.slice(i2)); return n2 ? (d2.Q = +n2[0], i2 + n2[0].length) : -1; } function parseUnixTimestampSeconds(d2, string3, i2) { var n2 = numberRe.exec(string3.slice(i2)); return n2 ? (d2.s = +n2[0], i2 + n2[0].length) : -1; } function formatDayOfMonth(d2, p3) { return pad2(d2.getDate(), p3, 2); } function formatHour24(d2, p3) { return pad2(d2.getHours(), p3, 2); } function formatHour12(d2, p3) { return pad2(d2.getHours() % 12 || 12, p3, 2); } function formatDayOfYear(d2, p3) { return pad2(1 + timeDay.count(timeYear(d2), d2), p3, 3); } function formatMilliseconds(d2, p3) { return pad2(d2.getMilliseconds(), p3, 3); } function formatMicroseconds(d2, p3) { return formatMilliseconds(d2, p3) + "000"; } function formatMonthNumber(d2, p3) { return pad2(d2.getMonth() + 1, p3, 2); } function formatMinutes(d2, p3) { return pad2(d2.getMinutes(), p3, 2); } function formatSeconds(d2, p3) { return pad2(d2.getSeconds(), p3, 2); } function formatWeekdayNumberMonday(d2) { var day = d2.getDay(); return day === 0 ? 7 : day; } function formatWeekNumberSunday(d2, p3) { return pad2(timeSunday.count(timeYear(d2) - 1, d2), p3, 2); } function dISO(d2) { var day = d2.getDay(); return day >= 4 || day === 0 ? timeThursday(d2) : timeThursday.ceil(d2); } function formatWeekNumberISO(d2, p3) { d2 = dISO(d2); return pad2(timeThursday.count(timeYear(d2), d2) + (timeYear(d2).getDay() === 4), p3, 2); } function formatWeekdayNumberSunday(d2) { return d2.getDay(); } function formatWeekNumberMonday(d2, p3) { return pad2(timeMonday.count(timeYear(d2) - 1, d2), p3, 2); } function formatYear(d2, p3) { return pad2(d2.getFullYear() % 100, p3, 2); } function formatYearISO(d2, p3) { d2 = dISO(d2); return pad2(d2.getFullYear() % 100, p3, 2); } function formatFullYear(d2, p3) { return pad2(d2.getFullYear() % 1e4, p3, 4); } function formatFullYearISO(d2, p3) { var day = d2.getDay(); d2 = day >= 4 || day === 0 ? timeThursday(d2) : timeThursday.ceil(d2); return pad2(d2.getFullYear() % 1e4, p3, 4); } function formatZone(d2) { var z2 = d2.getTimezoneOffset(); return (z2 > 0 ? "-" : (z2 *= -1, "+")) + pad2(z2 / 60 | 0, "0", 2) + pad2(z2 % 60, "0", 2); } function formatUTCDayOfMonth(d2, p3) { return pad2(d2.getUTCDate(), p3, 2); } function formatUTCHour24(d2, p3) { return pad2(d2.getUTCHours(), p3, 2); } function formatUTCHour12(d2, p3) { return pad2(d2.getUTCHours() % 12 || 12, p3, 2); } function formatUTCDayOfYear(d2, p3) { return pad2(1 + utcDay.count(utcYear(d2), d2), p3, 3); } function formatUTCMilliseconds(d2, p3) { return pad2(d2.getUTCMilliseconds(), p3, 3); } function formatUTCMicroseconds(d2, p3) { return formatUTCMilliseconds(d2, p3) + "000"; } function formatUTCMonthNumber(d2, p3) { return pad2(d2.getUTCMonth() + 1, p3, 2); } function formatUTCMinutes(d2, p3) { return pad2(d2.getUTCMinutes(), p3, 2); } function formatUTCSeconds(d2, p3) { return pad2(d2.getUTCSeconds(), p3, 2); } function formatUTCWeekdayNumberMonday(d2) { var dow = d2.getUTCDay(); return dow === 0 ? 7 : dow; } function formatUTCWeekNumberSunday(d2, p3) { return pad2(utcSunday.count(utcYear(d2) - 1, d2), p3, 2); } function UTCdISO(d2) { var day = d2.getUTCDay(); return day >= 4 || day === 0 ? utcThursday(d2) : utcThursday.ceil(d2); } function formatUTCWeekNumberISO(d2, p3) { d2 = UTCdISO(d2); return pad2(utcThursday.count(utcYear(d2), d2) + (utcYear(d2).getUTCDay() === 4), p3, 2); } function formatUTCWeekdayNumberSunday(d2) { return d2.getUTCDay(); } function formatUTCWeekNumberMonday(d2, p3) { return pad2(utcMonday.count(utcYear(d2) - 1, d2), p3, 2); } function formatUTCYear(d2, p3) { return pad2(d2.getUTCFullYear() % 100, p3, 2); } function formatUTCYearISO(d2, p3) { d2 = UTCdISO(d2); return pad2(d2.getUTCFullYear() % 100, p3, 2); } function formatUTCFullYear(d2, p3) { return pad2(d2.getUTCFullYear() % 1e4, p3, 4); } function formatUTCFullYearISO(d2, p3) { var day = d2.getUTCDay(); d2 = day >= 4 || day === 0 ? utcThursday(d2) : utcThursday.ceil(d2); return pad2(d2.getUTCFullYear() % 1e4, p3, 4); } function formatUTCZone() { return "+0000"; } function formatLiteralPercent() { return "%"; } function formatUnixTimestamp(d2) { return +d2; } function formatUnixTimestampSeconds(d2) { return Math.floor(+d2 / 1e3); } var pads, numberRe, percentRe, requoteRe; var init_locale2 = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/node_modules/d3-time-format/src/index.js var init_src27 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-time-format/src/index.js"() { "use strict"; init_defaultLocale2(); } }); // ../../node_modules/.pnpm/[email protected]/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 scale = continuous(), invert2 = scale.invert, domain = scale.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"); scale.invert = function(y5) { return new Date(invert2(y5)); }; scale.domain = function(_2) { return arguments.length ? domain(Array.from(_2, number4)) : domain().map(date); }; scale.ticks = function(interval2) { var d2 = domain(); return ticks2(d2[0], d2[d2.length - 1], interval2 == null ? 10 : interval2); }; scale.tickFormat = function(count, specifier) { return specifier == null ? tickFormat2 : format3(specifier); }; scale.nice = function(interval2) { var d2 = domain(); if (!interval2 || typeof interval2.range !== "function") interval2 = tickInterval2(d2[0], d2[d2.length - 1], interval2 == null ? 10 : interval2); return interval2 ? domain(nice(d2, interval2)) : scale; }; scale.copy = function() { return copy(scale, calendar(ticks2, tickInterval2, year, month, week, day, hour, minute, second2, format3)); }; return scale; } 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/[email protected]/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/[email protected]/node_modules/d3-scale/src/index.js var init_src28 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-scale/src/index.js"() { "use strict"; init_band(); init_linear(); init_ordinal(); init_time(); } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/d3-scale-chromatic/src/colors.js"() { "use strict"; __name(colors_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-scale-chromatic/src/categorical/Tableau10.js var Tableau10_default; var init_Tableau10 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-scale-chromatic/src/categorical/Tableau10.js"() { "use strict"; init_colors(); Tableau10_default = colors_default("4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-scale-chromatic/src/index.js var init_src29 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-scale-chromatic/src/index.js"() { "use strict"; init_Tableau10(); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-shape/src/constant.js function constant_default4(x5) { return /* @__PURE__ */ __name(function constant3() { return x5; }, "constant"); } var init_constant5 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-shape/src/constant.js"() { "use strict"; __name(constant_default4, "default"); } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/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/[email protected]/node_modules/d3-shape/src/path.js function withPath(shape) { let digits = 3; shape.digits = function(_2) { if (!arguments.length) return digits; if (_2 == null) { digits = null; } else { const d2 = Math.floor(_2); if (!(d2 >= 0)) throw new RangeError(`invalid digits: ${_2}`); digits = d2; } return shape; }; return () => new Path(digits); } var init_path2 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-shape/src/path.js"() { "use strict"; init_src13(); __name(withPath, "withPath"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-shape/src/arc.js function arcInnerRadius(d2) { return d2.innerRadius; } function arcOuterRadius(d2) { return d2.outerRadius; } function arcStartAngle(d2) { return d2.startAngle; } function arcEndAngle(d2) { return d2.endAngle; } function arcPadAngle(d2) { return d2 && d2.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, d2 = dx * dx + dy * dy, r2 = r1 - rc, D3 = x11 * y10 - x10 * y11, d3 = (dy < 0 ? -1 : 1) * sqrt(max3(0, r2 * r2 * d2 - D3 * D3)), cx0 = (D3 * dy - dx * d3) / d2, cy0 = (-D3 * dx - dy * d3) / d2, cx1 = (D3 * dy + dx * d3) / d2, cy1 = (-D3 * dx + dy * d3) / d2, 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_default4(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(_2) { return arguments.length ? (innerRadius = typeof _2 === "function" ? _2 : constant_default4(+_2), arc) : innerRadius; }; arc.outerRadius = function(_2) { return arguments.length ? (outerRadius = typeof _2 === "function" ? _2 : constant_default4(+_2), arc) : outerRadius; }; arc.cornerRadius = function(_2) { return arguments.length ? (cornerRadius = typeof _2 === "function" ? _2 : constant_default4(+_2), arc) : cornerRadius; }; arc.padRadius = function(_2) { return arguments.length ? (padRadius = _2 == null ? null : typeof _2 === "function" ? _2 : constant_default4(+_2), arc) : padRadius; }; arc.startAngle = function(_2) { return arguments.length ? (startAngle = typeof _2 === "function" ? _2 : constant_default4(+_2), arc) : startAngle; }; arc.endAngle = function(_2) { return arguments.length ? (endAngle = typeof _2 === "function" ? _2 : constant_default4(+_2), arc) : endAngle; }; arc.padAngle = function(_2) { return arguments.length ? (padAngle = typeof _2 === "function" ? _2 : constant_default4(+_2), arc) : padAngle; }; arc.context = function(_2) { return arguments.length ? (context = _2 == null ? null : _2, arc) : context; }; return arc; } var init_arc = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-shape/src/arc.js"() { "use strict"; init_constant5(); init_math2(); init_path2(); __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/[email protected]/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/[email protected]/node_modules/d3-shape/src/array.js"() { "use strict"; slice = Array.prototype.slice; __name(array_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/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, y5) { x5 = +x5, y5 = +y5; switch (this._point) { case 0: this._point = 1; this._line ? this._context.lineTo(x5, y5) : this._context.moveTo(x5, y5); break; case 1: this._point = 2; default: this._context.lineTo(x5, y5); break; } }, "point") }; __name(linear_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/d3-shape/src/point.js"() { "use strict"; __name(x, "x"); __name(y, "y"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-shape/src/line.js function line_default(x5, y5) { var defined = constant_default4(true), context = null, curve = linear_default, output2 = null, path4 = withPath(line2); x5 = typeof x5 === "function" ? x5 : x5 === void 0 ? x : constant_default4(x5); y5 = typeof y5 === "function" ? y5 : y5 === void 0 ? y : constant_default4(y5); function line2(data5) { var i2, n2 = (data5 = array_default(data5)).length, d2, defined0 = false, buffer; if (context == null) output2 = curve(buffer = path4()); for (i2 = 0; i2 <= n2; ++i2) { if (!(i2 < n2 && defined(d2 = data5[i2], i2, data5)) === defined0) { if (defined0 = !defined0) output2.lineStart(); else output2.lineEnd(); } if (defined0) output2.point(+x5(d2, i2, data5), +y5(d2, i2, data5)); } if (buffer) return output2 = null, buffer + "" || null; } __name(line2, "line"); line2.x = function(_2) { return arguments.length ? (x5 = typeof _2 === "function" ? _2 : constant_default4(+_2), line2) : x5; }; line2.y = function(_2) { return arguments.length ? (y5 = typeof _2 === "function" ? _2 : constant_default4(+_2), line2) : y5; }; line2.defined = function(_2) { return arguments.length ? (defined = typeof _2 === "function" ? _2 : constant_default4(!!_2), line2) : defined; }; line2.curve = function(_2) { return arguments.length ? (curve = _2, context != null && (output2 = curve(context)), line2) : curve; }; line2.context = function(_2) { return arguments.length ? (_2 == null ? context = output2 = null : output2 = curve(context = _2), line2) : context; }; return line2; } var init_line = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-shape/src/line.js"() { "use strict"; init_array3(); init_constant5(); init_linear2(); init_path2(); init_point(); __name(line_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-shape/src/descending.js function descending_default(a2, b2) { return b2 < a2 ? -1 : b2 > a2 ? 1 : b2 >= a2 ? 0 : NaN; } var init_descending2 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-shape/src/descending.js"() { "use strict"; __name(descending_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-shape/src/identity.js function identity_default3(d2) { return d2; } var init_identity3 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-shape/src/identity.js"() { "use strict"; __name(identity_default3, "default"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-shape/src/pie.js function pie_default() { var value2 = identity_default3, sortValues = descending_default, sort3 = null, startAngle = constant_default4(0), endAngle = constant_default4(tau2), padAngle = constant_default4(0); function pie2(data5) { var i2, n2 = (data5 = array_default(data5)).length, j2, 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(data5[i2], i2, data5)) > 0) { sum2 += v3; } } if (sortValues != null) index.sort(function(i3, j3) { return sortValues(arcs[i3], arcs[j3]); }); else if (sort3 != null) index.sort(function(i3, j3) { return sort3(data5[i3], data5[j3]); }); for (i2 = 0, k2 = sum2 ? (da - n2 * pa) / sum2 : 0; i2 < n2; ++i2, a0 = a1) { j2 = index[i2], v3 = arcs[j2], a1 = a0 + (v3 > 0 ? v3 * k2 : 0) + pa, arcs[j2] = { data: data5[j2], index: i2, value: v3, startAngle: a0, endAngle: a1, padAngle: p3 }; } return arcs; } __name(pie2, "pie"); pie2.value = function(_2) { return arguments.length ? (value2 = typeof _2 === "function" ? _2 : constant_default4(+_2), pie2) : value2; }; pie2.sortValues = function(_2) { return arguments.length ? (sortValues = _2, sort3 = null, pie2) : sortValues; }; pie2.sort = function(_2) { return arguments.length ? (sort3 = _2, sortValues = null, pie2) : sort3; }; pie2.startAngle = function(_2) { return arguments.length ? (startAngle = typeof _2 === "function" ? _2 : constant_default4(+_2), pie2) : startAngle; }; pie2.endAngle = function(_2) { return arguments.length ? (endAngle = typeof _2 === "function" ? _2 : constant_default4(+_2), pie2) : endAngle; }; pie2.padAngle = function(_2) { return arguments.length ? (padAngle = typeof _2 === "function" ? _2 : constant_default4(+_2), pie2) : padAngle; }; return pie2; } var init_pie = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-shape/src/pie.js"() { "use strict"; init_array3(); init_constant5(); init_descending2(); init_identity3(); init_math2(); __name(pie_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/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, y5) { x5 = +x5, y5 = +y5; switch (this._point) { case 0: { this._point = 1; if (this._line) this._context.lineTo(x5, y5); else this._context.moveTo(x5, y5); break; } case 1: this._point = 2; default: { if (this._x) this._context.bezierCurveTo(this._x0 = (this._x0 + x5) / 2, this._y0, this._x0, y5, x5, y5); else this._context.bezierCurveTo(this._x0, this._y0 = (this._y0 + y5) / 2, x5, this._y0, x5, y5); break; } } this._x0 = x5, this._y0 = y5; } }; __name(bumpX, "bumpX"); __name(bumpY, "bumpY"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-shape/src/noop.js function noop_default() { } var init_noop = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-shape/src/noop.js"() { "use strict"; __name(noop_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-shape/src/curve/basis.js function point2(that, x5, y5) { 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 + y5) / 6 ); } function Basis(context) { this._context = context; } function basis_default2(context) { return new Basis(context); } var init_basis2 = __esm({ "../../node_modules/.pnpm/[email protected]/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); 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, y5) { x5 = +x5, y5 = +y5; switch (this._point) { case 0: this._point = 1; this._line ? this._context.lineTo(x5, y5) : this._context.moveTo(x5, y5); 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); default: point2(this, x5, y5); break; } this._x0 = this._x1, this._x1 = x5; this._y0 = this._y1, this._y1 = y5; }, "point") }; __name(basis_default2, "default"); } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/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, y5) { x5 = +x5, y5 = +y5; switch (this._point) { case 0: this._point = 1; this._x2 = x5, this._y2 = y5; break; case 1: this._point = 2; this._x3 = x5, this._y3 = y5; break; case 2: this._point = 3; this._x4 = x5, this._y4 = y5; this._context.moveTo((this._x0 + 4 * this._x1 + x5) / 6, (this._y0 + 4 * this._y1 + y5) / 6); break; default: point2(this, x5, y5); break; } this._x0 = this._x1, this._x1 = x5; this._y0 = this._y1, this._y1 = y5; }, "point") }; __name(basisClosed_default2, "default"); } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/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, y5) { x5 = +x5, y5 = +y5; 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 + y5) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break; case 3: this._point = 4; default: point2(this, x5, y5); break; } this._x0 = this._x1, this._x1 = x5; this._y0 = this._y1, this._y1 = y5; }, "point") }; __name(basisOpen_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/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, y5 = this._y, j2 = x5.length - 1; if (j2 > 0) { var x0 = x5[0], y0 = y5[0], dx = x5[j2] - x0, dy = y5[j2] - y0, i2 = -1, t4; while (++i2 <= j2) { t4 = i2 / j2; this._basis.point( this._beta * x5[i2] + (1 - this._beta) * (x0 + t4 * dx), this._beta * y5[i2] + (1 - this._beta) * (y0 + t4 * dy) ); } } this._x = this._y = null; this._basis.lineEnd(); }, "lineEnd"), point: /* @__PURE__ */ __name(function(x5, y5) { this._x.push(+x5); this._y.push(+y5); }, "point") }; bundle_default = (/* @__PURE__ */ __name(function custom(beta) { function bundle(context) { return beta === 1 ? new Basis(context) : new Bundle(context, beta); } __name(bundle, "bundle"); bundle.beta = function(beta2) { return custom(+beta2); }; return bundle; }, "custom"))(0.85); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-shape/src/curve/cardinal.js function point3(that, x5, y5) { 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 - y5), 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/[email protected]/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, y5) { x5 = +x5, y5 = +y5; switch (this._point) { case 0: this._point = 1; this._line ? this._context.lineTo(x5, y5) : this._context.moveTo(x5, y5); break; case 1: this._point = 2; this._x1 = x5, this._y1 = y5; break; case 2: this._point = 3; default: point3(this, x5, y5); break; } this._x0 = this._x1, this._x1 = this._x2, this._x2 = x5; this._y0 = this._y1, this._y1 = this._y2, this._y2 = y5; }, "point") }; cardinal_default = (/* @__PURE__ */ __name(function custom2(tension) { function cardinal(context) { return new Cardinal(context, tension); } __name(cardinal, "cardinal"); cardinal.tension = function(tension2) { return custom2(+tension2); }; return cardinal; }, "custom"))(0); } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/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, y5) { x5 = +x5, y5 = +y5; switch (this._point) { case 0: this._point = 1; this._x3 = x5, this._y3 = y5; break; case 1: this._point = 2; this._context.moveTo(this._x4 = x5, this._y4 = y5); break; case 2: this._point = 3; this._x5 = x5, this._y5 = y5; break; default: point3(this, x5, y5); break; } this._x0 = this._x1, this._x1 = this._x2, this._x2 = x5; this._y0 = this._y1, this._y1 = this._y2, this._y2 = y5; }, "point") }; cardinalClosed_default = (/* @__PURE__ */ __name(function custom3(tension) { function cardinal(context) { return new CardinalClosed(context, tension); } __name(cardinal, "cardinal"); cardinal.tension = function(tension2) { return custom3(+tension2); }; return cardinal; }, "custom"))(0); } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/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, y5) { x5 = +x5, y5 = +y5; 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; default: point3(this, x5, y5); break; } this._x0 = this._x1, this._x1 = this._x2, this._x2 = x5; this._y0 = this._y1, this._y1 = this._y2, this._y2 = y5; }, "point") }; cardinalOpen_default = (/* @__PURE__ */ __name(function custom4(tension) { function cardinal(context) { return new CardinalOpen(context, tension); } __name(cardinal, "cardinal"); cardinal.tension = function(tension2) { return custom4(+tension2); }; return cardinal; }, "custom"))(0); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-shape/src/curve/catmullRom.js function point4(that, x5, y5) { 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 b2 = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a, m2 = 3 * that._l23_a * (that._l23_a + that._l12_a); x22 = (x22 * b2 + that._x1 * that._l23_2a - x5 * that._l12_2a) / m2; y22 = (y22 * b2 + that._y1 * that._l23_2a - y5 * that._l12_2a) / m2; } 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/[email protected]/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, y5) { x5 = +x5, y5 = +y5; if (this._point) { var x23 = this._x2 - x5, y23 = this._y2 - y5; 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, y5) : this._context.moveTo(x5, y5); break; case 1: this._point = 2; break; case 2: this._point = 3; default: point4(this, x5, y5); 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 = y5; }, "point") }; catmullRom_default = (/* @__PURE__ */ __name(function custom5(alpha) { function catmullRom(context) { return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0); } __name(catmullRom, "catmullRom"); catmullRom.alpha = function(alpha2) { return custom5(+alpha2); }; return catmullRom; }, "custom"))(0.5); } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/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, y5) { x5 = +x5, y5 = +y5; if (this._point) { var x23 = this._x2 - x5, y23 = this._y2 - y5; 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 = y5; break; case 1: this._point = 2; this._context.moveTo(this._x4 = x5, this._y4 = y5); break; case 2: this._point = 3; this._x5 = x5, this._y5 = y5; break; default: point4(this, x5, y5); 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 = y5; }, "point") }; catmullRomClosed_default = (/* @__PURE__ */ __name(function custom6(alpha) { function catmullRom(context) { return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0); } __name(catmullRom, "catmullRom"); catmullRom.alpha = function(alpha2) { return custom6(+alpha2); }; return catmullRom; }, "custom"))(0.5); } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/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, y5) { x5 = +x5, y5 = +y5; if (this._point) { var x23 = this._x2 - x5, y23 = this._y2 - y5; 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; default: point4(this, x5, y5); 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 = y5; }, "point") }; catmullRomOpen_default = (/* @__PURE__ */ __name(function custom7(alpha) { function catmullRom(context) { return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0); } __name(catmullRom, "catmullRom"); catmullRom.alpha = function(alpha2) { return custom7(+alpha2); }; return catmullRom; }, "custom"))(0.5); } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/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, y5) { x5 = +x5, y5 = +y5; if (this._point) this._context.lineTo(x5, y5); else this._point = 1, this._context.moveTo(x5, y5); }, "point") }; __name(linearClosed_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/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 h2 = that._x1 - that._x0; return h2 ? (3 * (that._y1 - that._y0) / h2 - 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/[email protected]/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, y5) { var t13 = NaN; x5 = +x5, y5 = +y5; if (x5 === this._x1 && y5 === this._y1) return; switch (this._point) { case 0: this._point = 1; this._line ? this._context.lineTo(x5, y5) : this._context.moveTo(x5, y5); break; case 1: this._point = 2; break; case 2: this._point = 3; point5(this, slope2(this, t13 = slope3(this, x5, y5)), t13); break; default: point5(this, this._t0, t13 = slope3(this, x5, y5)); break; } this._x0 = this._x1, this._x1 = x5; this._y0 = this._y1, this._y1 = y5; this._t0 = t13; }, "point") }; __name(MonotoneY, "MonotoneY"); (MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x5, y5) { MonotoneX.prototype.point.call(this, y5, x5); }; __name(ReflectContext, "ReflectContext"); ReflectContext.prototype = { moveTo: /* @__PURE__ */ __name(function(x5, y5) { this._context.moveTo(y5, x5); }, "moveTo"), closePath: /* @__PURE__ */ __name(function() { this._context.closePath(); }, "closePath"), lineTo: /* @__PURE__ */ __name(function(x5, y5) { this._context.lineTo(y5, x5); }, "lineTo"), bezierCurveTo: /* @__PURE__ */ __name(function(x1, y1, x22, y22, x5, y5) { this._context.bezierCurveTo(y1, x1, y22, x22, y5, x5); }, "bezierCurveTo") }; __name(monotoneX, "monotoneX"); __name(monotoneY, "monotoneY"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-shape/src/curve/natural.js function Natural(context) { this._context = context; } function controlPoints(x5) { var i2, n2 = x5.length - 1, m2, a2 = new Array(n2), b2 = new Array(n2), r2 = new Array(n2); a2[0] = 0, b2[0] = 2, r2[0] = x5[0] + 2 * x5[1]; for (i2 = 1; i2 < n2 - 1; ++i2) a2[i2] = 1, b2[i2] = 4, r2[i2] = 4 * x5[i2] + 2 * x5[i2 + 1]; a2[n2 - 1] = 2, b2[n2 - 1] = 7, r2[n2 - 1] = 8 * x5[n2 - 1] + x5[n2]; for (i2 = 1; i2 < n2; ++i2) m2 = a2[i2] / b2[i2 - 1], b2[i2] -= m2, r2[i2] -= m2 * r2[i2 - 1]; a2[n2 - 1] = r2[n2 - 1] / b2[n2 - 1]; for (i2 = n2 - 2; i2 >= 0; --i2) a2[i2] = (r2[i2] - a2[i2 + 1]) / b2[i2]; b2[n2 - 1] = (x5[n2] + a2[n2 - 1]) / 2; for (i2 = 0; i2 < n2 - 1; ++i2) b2[i2] = 2 * x5[i2 + 1] - a2[i2 + 1]; return [a2, b2]; } function natural_default(context) { return new Natural(context); } var init_natural = __esm({ "../../node_modules/.pnpm/[email protected]/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, y5 = this._y, n2 = x5.length; if (n2) { this._line ? this._context.lineTo(x5[0], y5[0]) : this._context.moveTo(x5[0], y5[0]); if (n2 === 2) { this._context.lineTo(x5[1], y5[1]); } else { var px = controlPoints(x5), py = controlPoints(y5); 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], y5[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, y5) { this._x.push(+x5); this._y.push(+y5); }, "point") }; __name(controlPoints, "controlPoints"); __name(natural_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/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, y5) { x5 = +x5, y5 = +y5; switch (this._point) { case 0: this._point = 1; this._line ? this._context.lineTo(x5, y5) : this._context.moveTo(x5, y5); break; case 1: this._point = 2; default: { if (this._t <= 0) { this._context.lineTo(this._x, y5); this._context.lineTo(x5, y5); } else { var x1 = this._x * (1 - this._t) + x5 * this._t; this._context.lineTo(x1, this._y); this._context.lineTo(x1, y5); } break; } } this._x = x5, this._y = y5; }, "point") }; __name(step_default, "default"); __name(stepBefore, "stepBefore"); __name(stepAfter, "stepAfter"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-shape/src/index.js var init_src30 = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/d3-zoom/src/constant.js var init_constant6 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-zoom/src/constant.js"() { "use strict"; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-zoom/src/event.js var init_event2 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-zoom/src/event.js"() { "use strict"; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-zoom/src/transform.js function Transform(k2, x5, y5) { this.k = k2; this.x = x5; this.y = y5; } function transform(node2) { while (!node2.__zoom) if (!(node2 = node2.parentNode)) return identity3; return node2.__zoom; } var identity3; var init_transform2 = __esm({ "../../node_modules/.pnpm/[email protected]/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, y5) { return x5 === 0 & y5 === 0 ? this : new Transform(this.k, this.x + this.k * x5, this.y + this.k * y5); }, "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(y5) { return y5 * this.k + this.y; }, "applyY"), invert: /* @__PURE__ */ __name(function(location) { return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k]; }, "invert"), invertX: /* @__PURE__ */ __name(function(x5) { return (x5 - this.x) / this.k; }, "invertX"), invertY: /* @__PURE__ */ __name(function(y5) { return (y5 - 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(y5) { return y5.copy().domain(y5.range().map(this.invertY, this).map(y5.invert, y5)); }, "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/[email protected]/node_modules/d3-zoom/src/noevent.js var init_noevent2 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-zoom/src/noevent.js"() { "use strict"; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-zoom/src/zoom.js var init_zoom = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-zoom/src/zoom.js"() { "use strict"; init_src11(); init_constant6(); init_event2(); init_transform2(); init_noevent2(); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-zoom/src/index.js var init_src31 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-zoom/src/index.js"() { "use strict"; init_zoom(); init_transform2(); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3/src/index.js var init_src32 = __esm({ "../../node_modules/.pnpm/[email protected]/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/@[email protected]/node_modules/@braintree/sanitize-url/dist/constants.js var require_constants = __commonJS({ "../../node_modules/.pnpm/@[email protected]/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 = /^.+(:|:)/gim; exports2.whitespaceEscapeCharsRegex = /(\\|%5[cC])((%(6[eE]|72|74))|[nrt])/g; exports2.relativeFirstCharacters = [".", "/"]; exports2.BLANK_URL = "about:blank"; } }); // ../../node_modules/.pnpm/@[email protected]/node_modules/@braintree/sanitize-url/dist/index.js var require_dist = __commonJS({ "../../node_modules/.pnpm/@[email protected]/node_modules/@braintree/sanitize-url/dist/index.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.sanitizeUrl = void 0; 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(match2, 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"); exports2.sanitizeUrl = sanitizeUrl6; } }); // src/diagrams/common/svgDrawCommon.ts var import_sanitize_url, drawRect, drawBackgroundRect, drawText, drawImage, drawEmbeddedImage, getNoteRect, getTextObj; var init_svgDrawCommon = __esm({ "src/diagrams/common/svgDrawCommon.ts"() { "use strict"; import_sanitize_url = __toESM(require_dist(), 1); 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, y5, link3) => { const imageElement = elem.append("image"); imageElement.attr("x", x5); imageElement.attr("y", y5); const sanitizedLink = (0, import_sanitize_url.sanitizeUrl)(link3); imageElement.attr("xlink:href", sanitizedLink); }, "drawImage"); drawEmbeddedImage = /* @__PURE__ */ __name((element3, x5, y5, link3) => { const imageElement = element3.append("use"); imageElement.attr("x", x5); imageElement.attr("y", y5); const sanitizedLink = (0, import_sanitize_url.sanitizeUrl)(link3); 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"); } }); // src/diagrams/c4/svgDraw.js var import_sanitize_url2, drawRect2, drawImage2, drawRels, drawBoundary, drawC4Shape, insertDatabaseIcon, insertComputerIcon, insertClockIcon, insertArrowHead, insertArrowEnd, insertArrowFilledHead, insertDynamicNumber, 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, y5, link3) { const imageElem = elem.append("image"); imageElem.attr("width", width3); imageElem.attr("height", height2); imageElem.attr("x", x5); imageElem.attr("y", y5); let sanitizedLink = link3.startsWith("data:image/png;base64") ? link3 : (0, import_sanitize_url2.sanitizeUrl)(link3); imageElem.attr("xlink:href", sanitizedLink); }, "drawImage"); drawRels = /* @__PURE__ */ __name((elem, rels2, conf7) => { 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 + "#arrowhead)"); } if (rel2.type === "birel" || rel2.type === "rel_b") { line2.attr("marker-start", "url(" + url + "#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 + "#arrowhead)"); } if (rel2.type === "birel" || rel2.type === "rel_b") { line2.attr("marker-start", "url(" + url + "#arrowend)"); } } let messageConf = conf7.messageFont(); _drawTextCandidateFunc(conf7)( 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 = conf7.messageFont(); _drawTextCandidateFunc(conf7)( "[" + 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 + conf7.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, conf7) { 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 = conf7.boundaryFont(); boundaryConf.fontWeight = "bold"; boundaryConf.fontSize = boundaryConf.fontSize + 2; boundaryConf.fontColor = fontColor; _drawTextCandidateFunc(conf7)( 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 = conf7.boundaryFont(); boundaryConf.fontColor = fontColor; _drawTextCandidateFunc(conf7)( 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 = conf7.boundaryFont(); boundaryConf.fontSize = boundaryConf.fontSize - 2; boundaryConf.fontColor = fontColor; _drawTextCandidateFunc(conf7)( 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, conf7) { let fillColor = c4Shape.bgColor ? c4Shape.bgColor : conf7[c4Shape.typeC4Shape.text + "_bg_color"]; let strokeColor = c4Shape.borderColor ? c4Shape.borderColor : conf7[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(conf7, 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 = conf7[c4Shape.typeC4Shape.text + "Font"](); textFontConf.fontWeight = "bold"; textFontConf.fontSize = textFontConf.fontSize + 2; textFontConf.fontColor = fontColor; _drawTextCandidateFunc(conf7)( c4Shape.label.text, c4ShapeElem, c4Shape.x, c4Shape.y + c4Shape.label.Y, c4Shape.width, c4Shape.height, { fill: fontColor }, textFontConf ); textFontConf = conf7[c4Shape.typeC4Shape.text + "Font"](); textFontConf.fontColor = fontColor; if (c4Shape.techn && c4Shape.techn?.text !== "") { _drawTextCandidateFunc(conf7)( 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(conf7)( 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 = conf7.personFont(); textFontConf.fontColor = fontColor; _drawTextCandidateFunc(conf7)( 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) { elem.append("defs").append("symbol").attr("id", "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) { elem.append("defs").append("symbol").attr("id", "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) { elem.append("defs").append("symbol").attr("id", "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) { elem.append("defs").append("marker").attr("id", "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) { elem.append("defs").append("marker").attr("id", "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) { elem.append("defs").append("marker").attr("id", "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"); insertDynamicNumber = /* @__PURE__ */ __name(function(elem) { elem.append("defs").append("marker").attr("id", "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); }, "insertDynamicNumber"); insertArrowCrossHead = /* @__PURE__ */ __name(function(elem) { const defs2 = elem.append("defs"); const marker = defs2.append("marker").attr("id", "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, y5, width3, height2, textAttrs) { const text3 = g2.append("text").attr("x", x5 + width3 / 2).attr("y", y5 + height2 / 2 + 5).style("text-anchor", "middle").text(content); _setTextAttrs(text3, textAttrs); } __name(byText, "byText"); function byTspan(content, g2, x5, y5, width3, height2, textAttrs, conf7) { const { fontSize, fontFamily, fontWeight } = conf7; 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 text3 = g2.append("text").attr("x", x5 + width3 / 2).attr("y", y5).style("text-anchor", "middle").attr("dominant-baseline", "middle").style("font-size", fontSize).style("font-weight", fontWeight).style("font-family", fontFamily); text3.append("tspan").attr("dy", dy).text(lines[i2]).attr("alignment-baseline", "mathematical"); _setTextAttrs(text3, textAttrs); } } __name(byTspan, "byTspan"); function byFo(content, g2, x5, y5, width3, height2, textAttrs, conf7) { const s2 = g2.append("switch"); const f3 = s2.append("foreignObject").attr("x", x5).attr("y", y5).attr("width", width3).attr("height", height2); const text3 = f3.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%"); text3.append("div").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content); byTspan(content, s2, x5, y5, width3, height2, textAttrs, conf7); _setTextAttrs(text3, 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(conf7) { return conf7.textPlacement === "fo" ? byFo : conf7.textPlacement === "old" ? byText : byTspan; }; }(); svgDraw_default = { drawRect: drawRect2, drawBoundary, drawC4Shape, drawRels, drawImage: drawImage2, insertArrowHead, insertArrowEnd, insertArrowFilledHead, insertDynamicNumber, insertArrowCrossHead, insertDatabaseIcon, insertComputerIcon, insertClockIcon }; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_freeGlobal.js var freeGlobal, freeGlobal_default; var init_freeGlobal = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_freeGlobal.js"() { "use strict"; freeGlobal = typeof global == "object" && global && global.Object === Object && global; freeGlobal_default = freeGlobal; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_root.js var freeSelf, root2, root_default; var init_root = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_Symbol.js var Symbol2, Symbol_default; var init_Symbol = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_Symbol.js"() { "use strict"; init_root(); Symbol2 = root_default.Symbol; Symbol_default = Symbol2; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_getRawTag.js function getRawTag(value2) { var isOwn = hasOwnProperty.call(value2, symToStringTag), tag2 = value2[symToStringTag]; try { value2[symToStringTag] = void 0; var unmasked = true; } catch (e3) { } var result = nativeObjectToString.call(value2); if (unmasked) { if (isOwn) { value2[symToStringTag] = tag2; } else { delete value2[symToStringTag]; } } return result; } var objectProto, hasOwnProperty, nativeObjectToString, symToStringTag, getRawTag_default; var init_getRawTag = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/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/[email protected]/node_modules/lodash-es/_objectToString.js"() { "use strict"; objectProto2 = Object.prototype; nativeObjectToString2 = objectProto2.toString; __name(objectToString, "objectToString"); objectToString_default = objectToString; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/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/[email protected]/node_modules/lodash-es/isObject.js function isObject(value2) { var type3 = typeof value2; return value2 != null && (type3 == "object" || type3 == "function"); } var isObject_default; var init_isObject = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/isObject.js"() { "use strict"; __name(isObject, "isObject"); isObject_default = isObject; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/isFunction.js function isFunction(value2) { if (!isObject_default(value2)) { return false; } var tag2 = baseGetTag_default(value2); return tag2 == funcTag || tag2 == genTag || tag2 == asyncTag || tag2 == proxyTag; } var asyncTag, funcTag, genTag, proxyTag, isFunction_default; var init_isFunction = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_coreJsData.js var coreJsData, coreJsData_default; var init_coreJsData = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_coreJsData.js"() { "use strict"; init_root(); coreJsData = root_default["__core-js_shared__"]; coreJsData_default = coreJsData; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/node_modules/lodash-es/_toSource.js"() { "use strict"; funcProto = Function.prototype; funcToString = funcProto.toString; __name(toSource, "toSource"); toSource_default = toSource; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/node_modules/lodash-es/_getValue.js"() { "use strict"; __name(getValue, "getValue"); getValue_default = getValue; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_getNative.js"() { "use strict"; init_baseIsNative(); init_getValue(); __name(getNative, "getNative"); getNative_default = getNative; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_nativeCreate.js var nativeCreate, nativeCreate_default; var init_nativeCreate = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_nativeCreate.js"() { "use strict"; init_getNative(); nativeCreate = getNative_default(Object, "create"); nativeCreate_default = nativeCreate; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_hashClear.js"() { "use strict"; init_nativeCreate(); __name(hashClear, "hashClear"); hashClear_default = hashClear; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_hashDelete.js"() { "use strict"; __name(hashDelete, "hashDelete"); hashDelete_default = hashDelete; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_hashGet.js function hashGet(key) { var data5 = this.__data__; if (nativeCreate_default) { var result = data5[key]; return result === HASH_UNDEFINED ? void 0 : result; } return hasOwnProperty3.call(data5, key) ? data5[key] : void 0; } var HASH_UNDEFINED, objectProto4, hasOwnProperty3, hashGet_default; var init_hashGet = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_hashGet.js"() { "use strict"; init_nativeCreate(); HASH_UNDEFINED = "__lodash_hash_undefined__"; objectProto4 = Object.prototype; hasOwnProperty3 = objectProto4.hasOwnProperty; __name(hashGet, "hashGet"); hashGet_default = hashGet; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_hashHas.js function hashHas(key) { var data5 = this.__data__; return nativeCreate_default ? data5[key] !== void 0 : hasOwnProperty4.call(data5, key); } var objectProto5, hasOwnProperty4, hashHas_default; var init_hashHas = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_hashHas.js"() { "use strict"; init_nativeCreate(); objectProto5 = Object.prototype; hasOwnProperty4 = objectProto5.hasOwnProperty; __name(hashHas, "hashHas"); hashHas_default = hashHas; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_hashSet.js function hashSet(key, value2) { var data5 = this.__data__; this.size += this.has(key) ? 0 : 1; data5[key] = nativeCreate_default && value2 === void 0 ? HASH_UNDEFINED2 : value2; return this; } var HASH_UNDEFINED2, hashSet_default; var init_hashSet = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_hashSet.js"() { "use strict"; init_nativeCreate(); HASH_UNDEFINED2 = "__lodash_hash_undefined__"; __name(hashSet, "hashSet"); hashSet_default = hashSet; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_Hash.js function Hash(entries) { var index = -1, length2 = entries == null ? 0 : entries.length; this.clear(); while (++index < length2) { var entry = entries[index]; this.set(entry[0], entry[1]); } } var Hash_default; var init_Hash = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_listCacheClear.js function listCacheClear() { this.__data__ = []; this.size = 0; } var listCacheClear_default; var init_listCacheClear = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_listCacheClear.js"() { "use strict"; __name(listCacheClear, "listCacheClear"); listCacheClear_default = listCacheClear; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/eq.js"() { "use strict"; __name(eq, "eq"); eq_default = eq; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_assocIndexOf.js"() { "use strict"; init_eq(); __name(assocIndexOf, "assocIndexOf"); assocIndexOf_default = assocIndexOf; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_listCacheDelete.js function listCacheDelete(key) { var data5 = this.__data__, index = assocIndexOf_default(data5, key); if (index < 0) { return false; } var lastIndex = data5.length - 1; if (index == lastIndex) { data5.pop(); } else { splice.call(data5, index, 1); } --this.size; return true; } var arrayProto, splice, listCacheDelete_default; var init_listCacheDelete = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_listCacheGet.js function listCacheGet(key) { var data5 = this.__data__, index = assocIndexOf_default(data5, key); return index < 0 ? void 0 : data5[index][1]; } var listCacheGet_default; var init_listCacheGet = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_listCacheGet.js"() { "use strict"; init_assocIndexOf(); __name(listCacheGet, "listCacheGet"); listCacheGet_default = listCacheGet; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_listCacheHas.js"() { "use strict"; init_assocIndexOf(); __name(listCacheHas, "listCacheHas"); listCacheHas_default = listCacheHas; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_listCacheSet.js function listCacheSet(key, value2) { var data5 = this.__data__, index = assocIndexOf_default(data5, key); if (index < 0) { ++this.size; data5.push([key, value2]); } else { data5[index][1] = value2; } return this; } var listCacheSet_default; var init_listCacheSet = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_listCacheSet.js"() { "use strict"; init_assocIndexOf(); __name(listCacheSet, "listCacheSet"); listCacheSet_default = listCacheSet; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_ListCache.js function ListCache(entries) { var index = -1, length2 = entries == null ? 0 : entries.length; this.clear(); while (++index < length2) { var entry = entries[index]; this.set(entry[0], entry[1]); } } var ListCache_default; var init_ListCache = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_Map.js var Map2, Map_default; var init_Map = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_Map.js"() { "use strict"; init_getNative(); init_root(); Map2 = getNative_default(root_default, "Map"); Map_default = Map2; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_mapCacheClear.js"() { "use strict"; init_Hash(); init_ListCache(); init_Map(); __name(mapCacheClear, "mapCacheClear"); mapCacheClear_default = mapCacheClear; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_isKeyable.js"() { "use strict"; __name(isKeyable, "isKeyable"); isKeyable_default = isKeyable; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_getMapData.js function getMapData(map5, key) { var data5 = map5.__data__; return isKeyable_default(key) ? data5[typeof key == "string" ? "string" : "hash"] : data5.map; } var getMapData_default; var init_getMapData = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_getMapData.js"() { "use strict"; init_isKeyable(); __name(getMapData, "getMapData"); getMapData_default = getMapData; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_mapCacheDelete.js"() { "use strict"; init_getMapData(); __name(mapCacheDelete, "mapCacheDelete"); mapCacheDelete_default = mapCacheDelete; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_mapCacheGet.js"() { "use strict"; init_getMapData(); __name(mapCacheGet, "mapCacheGet"); mapCacheGet_default = mapCacheGet; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_mapCacheHas.js"() { "use strict"; init_getMapData(); __name(mapCacheHas, "mapCacheHas"); mapCacheHas_default = mapCacheHas; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_mapCacheSet.js function mapCacheSet(key, value2) { var data5 = getMapData_default(this, key), size5 = data5.size; data5.set(key, value2); this.size += data5.size == size5 ? 0 : 1; return this; } var mapCacheSet_default; var init_mapCacheSet = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_mapCacheSet.js"() { "use strict"; init_getMapData(); __name(mapCacheSet, "mapCacheSet"); mapCacheSet_default = mapCacheSet; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_MapCache.js function MapCache(entries) { var index = -1, length2 = entries == null ? 0 : entries.length; this.clear(); while (++index < length2) { var entry = entries[index]; this.set(entry[0], entry[1]); } } var MapCache_default; var init_MapCache = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/memoize.js function memoize(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 (memoize.Cache || MapCache_default)(); return memoized; } var FUNC_ERROR_TEXT, memoize_default; var init_memoize = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/memoize.js"() { "use strict"; init_MapCache(); FUNC_ERROR_TEXT = "Expected a function"; __name(memoize, "memoize"); memoize.Cache = MapCache_default; memoize_default = memoize; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_stackClear.js"() { "use strict"; init_ListCache(); __name(stackClear, "stackClear"); stackClear_default = stackClear; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_stackDelete.js function stackDelete(key) { var data5 = this.__data__, result = data5["delete"](key); this.size = data5.size; return result; } var stackDelete_default; var init_stackDelete = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_stackDelete.js"() { "use strict"; __name(stackDelete, "stackDelete"); stackDelete_default = stackDelete; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_stackGet.js function stackGet(key) { return this.__data__.get(key); } var stackGet_default; var init_stackGet = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_stackGet.js"() { "use strict"; __name(stackGet, "stackGet"); stackGet_default = stackGet; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_stackHas.js function stackHas(key) { return this.__data__.has(key); } var stackHas_default; var init_stackHas = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_stackHas.js"() { "use strict"; __name(stackHas, "stackHas"); stackHas_default = stackHas; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_stackSet.js function stackSet(key, value2) { var data5 = this.__data__; if (data5 instanceof ListCache_default) { var pairs2 = data5.__data__; if (!Map_default || pairs2.length < LARGE_ARRAY_SIZE - 1) { pairs2.push([key, value2]); this.size = ++data5.size; return this; } data5 = this.__data__ = new MapCache_default(pairs2); } data5.set(key, value2); this.size = data5.size; return this; } var LARGE_ARRAY_SIZE, stackSet_default; var init_stackSet = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_Stack.js function Stack(entries) { var data5 = this.__data__ = new ListCache_default(entries); this.size = data5.size; } var Stack_default; var init_Stack = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_defineProperty.js var defineProperty, defineProperty_default; var init_defineProperty = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/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/[email protected]/node_modules/lodash-es/_baseAssignValue.js"() { "use strict"; init_defineProperty(); __name(baseAssignValue, "baseAssignValue"); baseAssignValue_default = baseAssignValue; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_assignMergeValue.js"() { "use strict"; init_baseAssignValue(); init_eq(); __name(assignMergeValue, "assignMergeValue"); assignMergeValue_default = assignMergeValue; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_createBaseFor.js"() { "use strict"; __name(createBaseFor, "createBaseFor"); createBaseFor_default = createBaseFor; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_baseFor.js var baseFor, baseFor_default; var init_baseFor = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_baseFor.js"() { "use strict"; init_createBaseFor(); baseFor = createBaseFor_default(); baseFor_default = baseFor; } }); // ../../node_modules/.pnpm/[email protected]/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 freeExports, freeModule, moduleExports, Buffer2, allocUnsafe, cloneBuffer_default; var init_cloneBuffer = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_cloneBuffer.js"() { "use strict"; init_root(); 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; allocUnsafe = Buffer2 ? Buffer2.allocUnsafe : void 0; __name(cloneBuffer, "cloneBuffer"); cloneBuffer_default = cloneBuffer; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_Uint8Array.js var Uint8Array2, Uint8Array_default; var init_Uint8Array = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_Uint8Array.js"() { "use strict"; init_root(); Uint8Array2 = root_default.Uint8Array; Uint8Array_default = Uint8Array2; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_cloneArrayBuffer.js"() { "use strict"; init_Uint8Array(); __name(cloneArrayBuffer, "cloneArrayBuffer"); cloneArrayBuffer_default = cloneArrayBuffer; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_cloneTypedArray.js"() { "use strict"; init_cloneArrayBuffer(); __name(cloneTypedArray, "cloneTypedArray"); cloneTypedArray_default = cloneTypedArray; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_copyArray.js"() { "use strict"; __name(copyArray, "copyArray"); copyArray_default = copyArray; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_baseCreate.js var objectCreate, baseCreate, baseCreate_default; var init_baseCreate = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/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/[email protected]/node_modules/lodash-es/_overArg.js"() { "use strict"; __name(overArg, "overArg"); overArg_default = overArg; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_getPrototype.js var getPrototype, getPrototype_default; var init_getPrototype = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_getPrototype.js"() { "use strict"; init_overArg(); getPrototype = overArg_default(Object.getPrototypeOf, Object); getPrototype_default = getPrototype; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_isPrototype.js function isPrototype(value2) { var Ctor = value2 && value2.constructor, proto = typeof Ctor == "function" && Ctor.prototype || objectProto6; return value2 === proto; } var objectProto6, isPrototype_default; var init_isPrototype = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_isPrototype.js"() { "use strict"; objectProto6 = Object.prototype; __name(isPrototype, "isPrototype"); isPrototype_default = isPrototype; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_initCloneObject.js"() { "use strict"; init_baseCreate(); init_getPrototype(); init_isPrototype(); __name(initCloneObject, "initCloneObject"); initCloneObject_default = initCloneObject; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/isObjectLike.js function isObjectLike(value2) { return value2 != null && typeof value2 == "object"; } var isObjectLike_default; var init_isObjectLike = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/isObjectLike.js"() { "use strict"; __name(isObjectLike, "isObjectLike"); isObjectLike_default = isObjectLike; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_baseIsArguments.js"() { "use strict"; init_baseGetTag(); init_isObjectLike(); argsTag = "[object Arguments]"; __name(baseIsArguments, "baseIsArguments"); baseIsArguments_default = baseIsArguments; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/isArguments.js var objectProto7, hasOwnProperty5, propertyIsEnumerable, isArguments, isArguments_default; var init_isArguments = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/isArguments.js"() { "use strict"; init_baseIsArguments(); init_isObjectLike(); objectProto7 = Object.prototype; hasOwnProperty5 = objectProto7.hasOwnProperty; propertyIsEnumerable = objectProto7.propertyIsEnumerable; isArguments = baseIsArguments_default(/* @__PURE__ */ function() { return arguments; }()) ? baseIsArguments_default : function(value2) { return isObjectLike_default(value2) && hasOwnProperty5.call(value2, "callee") && !propertyIsEnumerable.call(value2, "callee"); }; isArguments_default = isArguments; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/isArray.js var isArray, isArray_default; var init_isArray = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/isArray.js"() { "use strict"; isArray = Array.isArray; isArray_default = isArray; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/isLength.js function isLength(value2) { return typeof value2 == "number" && value2 > -1 && value2 % 1 == 0 && value2 <= MAX_SAFE_INTEGER; } var MAX_SAFE_INTEGER, isLength_default; var init_isLength = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/isLength.js"() { "use strict"; MAX_SAFE_INTEGER = 9007199254740991; __name(isLength, "isLength"); isLength_default = isLength; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/isArrayLike.js function isArrayLike(value2) { return value2 != null && isLength_default(value2.length) && !isFunction_default(value2); } var isArrayLike_default; var init_isArrayLike = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/isArrayLike.js"() { "use strict"; init_isFunction(); init_isLength(); __name(isArrayLike, "isArrayLike"); isArrayLike_default = isArrayLike; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/isArrayLikeObject.js function isArrayLikeObject(value2) { return isObjectLike_default(value2) && isArrayLike_default(value2); } var isArrayLikeObject_default; var init_isArrayLikeObject = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/isArrayLikeObject.js"() { "use strict"; init_isArrayLike(); init_isObjectLike(); __name(isArrayLikeObject, "isArrayLikeObject"); isArrayLikeObject_default = isArrayLikeObject; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/stubFalse.js function stubFalse() { return false; } var stubFalse_default; var init_stubFalse = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/stubFalse.js"() { "use strict"; __name(stubFalse, "stubFalse"); stubFalse_default = stubFalse; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/isBuffer.js var freeExports2, freeModule2, moduleExports2, Buffer3, nativeIsBuffer, isBuffer, isBuffer_default; var init_isBuffer = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/isBuffer.js"() { "use strict"; init_root(); init_stubFalse(); freeExports2 = typeof exports == "object" && exports && !exports.nodeType && exports; freeModule2 = freeExports2 && typeof module == "object" && module && !module.nodeType && module; moduleExports2 = freeModule2 && freeModule2.exports === freeExports2; Buffer3 = moduleExports2 ? root_default.Buffer : void 0; nativeIsBuffer = Buffer3 ? Buffer3.isBuffer : void 0; isBuffer = nativeIsBuffer || stubFalse_default; isBuffer_default = isBuffer; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/isPlainObject.js function isPlainObject(value2) { if (!isObjectLike_default(value2) || baseGetTag_default(value2) != objectTag) { return false; } var proto = getPrototype_default(value2); if (proto === null) { return true; } var Ctor = hasOwnProperty6.call(proto, "constructor") && proto.constructor; return typeof Ctor == "function" && Ctor instanceof Ctor && funcToString3.call(Ctor) == objectCtorString; } var objectTag, funcProto3, objectProto8, funcToString3, hasOwnProperty6, objectCtorString, isPlainObject_default; var init_isPlainObject = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/isPlainObject.js"() { "use strict"; init_baseGetTag(); init_getPrototype(); init_isObjectLike(); objectTag = "[object Object]"; funcProto3 = Function.prototype; objectProto8 = Object.prototype; funcToString3 = funcProto3.toString; hasOwnProperty6 = objectProto8.hasOwnProperty; objectCtorString = funcToString3.call(Object); __name(isPlainObject, "isPlainObject"); isPlainObject_default = isPlainObject; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_baseIsTypedArray.js function baseIsTypedArray(value2) { return isObjectLike_default(value2) && isLength_default(value2.length) && !!typedArrayTags[baseGetTag_default(value2)]; } var argsTag2, arrayTag, boolTag, dateTag, errorTag, funcTag2, mapTag, numberTag, objectTag2, regexpTag, setTag, stringTag, weakMapTag, arrayBufferTag, dataViewTag, float32Tag, float64Tag, int8Tag, int16Tag, int32Tag, uint8Tag, uint8ClampedTag, uint16Tag, uint32Tag, typedArrayTags, baseIsTypedArray_default; var init_baseIsTypedArray = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_baseIsTypedArray.js"() { "use strict"; init_baseGetTag(); init_isLength(); init_isObjectLike(); argsTag2 = "[object Arguments]"; arrayTag = "[object Array]"; boolTag = "[object Boolean]"; dateTag = "[object Date]"; errorTag = "[object Error]"; funcTag2 = "[object Function]"; mapTag = "[object Map]"; numberTag = "[object Number]"; objectTag2 = "[object Object]"; regexpTag = "[object RegExp]"; setTag = "[object Set]"; stringTag = "[object String]"; weakMapTag = "[object WeakMap]"; arrayBufferTag = "[object ArrayBuffer]"; dataViewTag = "[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[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag2] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag2] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; __name(baseIsTypedArray, "baseIsTypedArray"); baseIsTypedArray_default = baseIsTypedArray; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_baseUnary.js"() { "use strict"; __name(baseUnary, "baseUnary"); baseUnary_default = baseUnary; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_nodeUtil.js var freeExports3, freeModule3, moduleExports3, freeProcess, nodeUtil, nodeUtil_default; var init_nodeUtil = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_nodeUtil.js"() { "use strict"; init_freeGlobal(); freeExports3 = typeof exports == "object" && exports && !exports.nodeType && exports; freeModule3 = freeExports3 && typeof module == "object" && module && !module.nodeType && module; moduleExports3 = freeModule3 && freeModule3.exports === freeExports3; freeProcess = moduleExports3 && freeGlobal_default.process; nodeUtil = function() { try { var types = freeModule3 && freeModule3.require && freeModule3.require("util").types; if (types) { return types; } return freeProcess && freeProcess.binding && freeProcess.binding("util"); } catch (e3) { } }(); nodeUtil_default = nodeUtil; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/isTypedArray.js var nodeIsTypedArray, isTypedArray, isTypedArray_default; var init_isTypedArray = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/isTypedArray.js"() { "use strict"; init_baseIsTypedArray(); init_baseUnary(); init_nodeUtil(); nodeIsTypedArray = nodeUtil_default && nodeUtil_default.isTypedArray; isTypedArray = nodeIsTypedArray ? baseUnary_default(nodeIsTypedArray) : baseIsTypedArray_default; isTypedArray_default = isTypedArray; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_safeGet.js"() { "use strict"; __name(safeGet, "safeGet"); safeGet_default = safeGet; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_assignValue.js function assignValue(object3, key, value2) { var objValue = object3[key]; if (!(hasOwnProperty7.call(object3, key) && eq_default(objValue, value2)) || value2 === void 0 && !(key in object3)) { baseAssignValue_default(object3, key, value2); } } var objectProto9, hasOwnProperty7, assignValue_default; var init_assignValue = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_assignValue.js"() { "use strict"; init_baseAssignValue(); init_eq(); objectProto9 = Object.prototype; hasOwnProperty7 = objectProto9.hasOwnProperty; __name(assignValue, "assignValue"); assignValue_default = assignValue; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_copyObject.js"() { "use strict"; init_assignValue(); init_baseAssignValue(); __name(copyObject, "copyObject"); copyObject_default = copyObject; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_baseTimes.js"() { "use strict"; __name(baseTimes, "baseTimes"); baseTimes_default = baseTimes; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_isIndex.js function isIndex(value2, length2) { var type3 = typeof value2; length2 = length2 == null ? MAX_SAFE_INTEGER2 : length2; return !!length2 && (type3 == "number" || type3 != "symbol" && reIsUint.test(value2)) && (value2 > -1 && value2 % 1 == 0 && value2 < length2); } var MAX_SAFE_INTEGER2, reIsUint, isIndex_default; var init_isIndex = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_isIndex.js"() { "use strict"; MAX_SAFE_INTEGER2 = 9007199254740991; reIsUint = /^(?:0|[1-9]\d*)$/; __name(isIndex, "isIndex"); isIndex_default = isIndex; } }); // ../../node_modules/.pnpm/[email protected]/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 || hasOwnProperty8.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 objectProto10, hasOwnProperty8, arrayLikeKeys_default; var init_arrayLikeKeys = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_arrayLikeKeys.js"() { "use strict"; init_baseTimes(); init_isArguments(); init_isArray(); init_isBuffer(); init_isIndex(); init_isTypedArray(); objectProto10 = Object.prototype; hasOwnProperty8 = objectProto10.hasOwnProperty; __name(arrayLikeKeys, "arrayLikeKeys"); arrayLikeKeys_default = arrayLikeKeys; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_nativeKeysIn.js"() { "use strict"; __name(nativeKeysIn, "nativeKeysIn"); nativeKeysIn_default = nativeKeysIn; } }); // ../../node_modules/.pnpm/[email protected]/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 || !hasOwnProperty9.call(object3, key)))) { result.push(key); } } return result; } var objectProto11, hasOwnProperty9, baseKeysIn_default; var init_baseKeysIn = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_baseKeysIn.js"() { "use strict"; init_isObject(); init_isPrototype(); init_nativeKeysIn(); objectProto11 = Object.prototype; hasOwnProperty9 = objectProto11.hasOwnProperty; __name(baseKeysIn, "baseKeysIn"); baseKeysIn_default = baseKeysIn; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/keysIn.js"() { "use strict"; init_arrayLikeKeys(); init_baseKeysIn(); init_isArrayLike(); __name(keysIn, "keysIn"); keysIn_default = keysIn; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/toPlainObject.js"() { "use strict"; init_copyObject(); init_keysIn(); __name(toPlainObject, "toPlainObject"); toPlainObject_default = toPlainObject; } }); // ../../node_modules/.pnpm/[email protected]/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 isCommon2 = newValue === void 0; if (isCommon2) { 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) { isCommon2 = false; newValue = cloneBuffer_default(srcValue, true); } else if (isTyped) { isCommon2 = 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 { isCommon2 = false; } } if (isCommon2) { 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/[email protected]/node_modules/lodash-es/_baseMergeDeep.js"() { "use strict"; init_assignMergeValue(); init_cloneBuffer(); init_cloneTypedArray(); init_copyArray(); init_initCloneObject(); init_isArguments(); init_isArray(); init_isArrayLikeObject(); init_isBuffer(); init_isFunction(); init_isObject(); init_isPlainObject(); init_isTypedArray(); init_safeGet(); init_toPlainObject(); __name(baseMergeDeep, "baseMergeDeep"); baseMergeDeep_default = baseMergeDeep; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/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/[email protected]/node_modules/lodash-es/identity.js function identity4(value2) { return value2; } var identity_default4; var init_identity4 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/identity.js"() { "use strict"; __name(identity4, "identity"); identity_default4 = identity4; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_apply.js function apply(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/[email protected]/node_modules/lodash-es/_apply.js"() { "use strict"; __name(apply, "apply"); apply_default = apply; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_overRest.js"() { "use strict"; init_apply(); nativeMax = Math.max; __name(overRest, "overRest"); overRest_default = overRest; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/constant.js function constant(value2) { return function() { return value2; }; } var constant_default6; var init_constant7 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/constant.js"() { "use strict"; __name(constant, "constant"); constant_default6 = constant; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_baseSetToString.js var baseSetToString, baseSetToString_default; var init_baseSetToString = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_baseSetToString.js"() { "use strict"; init_constant7(); init_defineProperty(); init_identity4(); baseSetToString = !defineProperty_default ? identity_default4 : function(func, string3) { return defineProperty_default(func, "toString", { "configurable": true, "enumerable": false, "value": constant_default6(string3), "writable": true }); }; baseSetToString_default = baseSetToString; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_shortOut.js function shortOut(func) { var count = 0, lastCalled = 0; return function() { var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled); lastCalled = stamp; if (remaining > 0) { if (++count >= HOT_COUNT) { return arguments[0]; } } else { count = 0; } return func.apply(void 0, arguments); }; } var HOT_COUNT, HOT_SPAN, nativeNow, shortOut_default; var init_shortOut = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_setToString.js var setToString, setToString_default; var init_setToString = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_setToString.js"() { "use strict"; init_baseSetToString(); init_shortOut(); setToString = shortOut_default(baseSetToString_default); setToString_default = setToString; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_baseRest.js"() { "use strict"; init_identity4(); init_overRest(); init_setToString(); __name(baseRest, "baseRest"); baseRest_default = baseRest; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_isIterateeCall.js"() { "use strict"; init_eq(); init_isArrayLike(); init_isIndex(); init_isObject(); __name(isIterateeCall, "isIterateeCall"); isIterateeCall_default = isIterateeCall; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_createAssigner.js"() { "use strict"; init_baseRest(); init_isIterateeCall(); __name(createAssigner, "createAssigner"); createAssigner_default = createAssigner; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/merge.js var merge, merge_default3; var init_merge4 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/merge.js"() { "use strict"; init_baseMerge(); init_createAssigner(); merge = createAssigner_default(function(object3, source, srcIndex) { baseMerge_default(object3, source, srcIndex); }); merge_default3 = merge; } }); // 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, config6) { const url = linkStr.trim(); if (!url) { return void 0; } if (config6.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 d2 = 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) * d2 + (points[0].x + center4.x) / 2; cardinalityPosition.y = -Math.cos(angle2 + Math.PI) * d2 + (points[0].y + center4.y) / 2; } else if (position5 === "end_right") { cardinalityPosition.x = Math.sin(angle2 - Math.PI) * d2 + (points[0].x + center4.x) / 2 - 5; cardinalityPosition.y = -Math.cos(angle2 - Math.PI) * d2 + (points[0].y + center4.y) / 2 - 5; } else if (position5 === "end_left") { cardinalityPosition.x = Math.sin(angle2) * d2 + (points[0].x + center4.x) / 2 - 5; cardinalityPosition.y = -Math.cos(angle2) * d2 + (points[0].y + center4.y) / 2 - 5; } else { cardinalityPosition.x = Math.sin(angle2) * d2 + (points[0].x + center4.x) / 2; cardinalityPosition.y = -Math.cos(angle2) * d2 + (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(text3, config6) { return calculateTextDimensions(text3, config6).height; } function calculateTextWidth(text3, config6) { return calculateTextDimensions(text3, config6).width; } function isDetailedError(error3) { return "str" in error3; } function cleanAndMerge(defaultData, data5) { return merge_default3({}, defaultData, data5); } function handleUndefinedAttr(attrValue) { return attrValue ?? null; } 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_memoize(); init_merge4(); 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(text3, config6) { const inits = detectDirective(text3, /(?: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(text3, config6); 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(text3, type3 = null) { try { const commentWithoutDirectives = new RegExp( `[%]{2}(?![{]${directiveWithoutOpen.source})(?=[}][%]{2}).* `, "ig" ); text3 = text3.trim().replace(commentWithoutDirectives, "").replace(/'/gm, '"'); log.debug( `Detecting diagram directive${type3 !== null ? " type:" + type3 : ""} based on the text:${text3}` ); let match2; const result = []; while ((match2 = directiveRegex.exec(text3)) !== null) { if (match2.index === directiveRegex.lastIndex) { directiveRegex.lastIndex++; } if (match2 && !type3 || type3 && match2[1]?.match(type3) || type3 && match2[2]?.match(type3)) { const type4 = match2[1] ? match2[1] : match2[2]; const args = match2[3] ? match2[3].trim() : match2[4] ? JSON.parse(match2[4].trim()) : null; result.push({ type: type4, args }); } } if (result.length === 0) { return { type: text3, 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: '${text3}'` ); return { type: void 0, args: null }; } }, "detectDirective"); removeDirectives = /* @__PURE__ */ __name(function(text3) { return text3.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 < 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 d2 = 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) * d2 + (points[0].x + center4.x) / 2; cardinalityPosition.y = -Math.cos(angle2) * d2 + (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((options3) => { return makeRandomHex(options3.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_default( (label, maxWidth, config6) => { if (!label) { return label; } config6 = Object.assign( { fontSize: 12, fontWeight: 400, fontFamily: "Arial", joinWith: "
" }, config6 ); 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} `, config6); const nextLineLength = calculateTextWidth(nextLine, config6); if (wordLength > maxWidth) { const { hyphenatedStrings, remainingWord } = breakString(word, maxWidth, "-", config6); completedLines.push(nextLine, ...hyphenatedStrings); nextLine = remainingWord; } else if (nextLineLength + wordLength >= maxWidth) { 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(config6.joinWith); }, (label, maxWidth, config6) => `${label}${maxWidth}${config6.fontSize}${config6.fontWeight}${config6.fontFamily}${config6.joinWith}` ); breakString = memoize_default( (word, maxWidth, hyphenCharacter = "-", config6) => { config6 = Object.assign( { fontSize: 12, fontWeight: 400, fontFamily: "Arial", margin: 0 }, config6 ); const characters2 = [...word]; const lines = []; let currentLine = ""; characters2.forEach((character2, index) => { const nextLine = `${currentLine}${character2}`; const lineWidth = calculateTextWidth(nextLine, config6); if (lineWidth >= maxWidth) { 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, maxWidth, hyphenCharacter = "-", config6) => `${word}${maxWidth}${hyphenCharacter}${config6.fontSize}${config6.fontWeight}${config6.fontFamily}` ); __name(calculateTextHeight, "calculateTextHeight"); __name(calculateTextWidth, "calculateTextWidth"); calculateTextDimensions = memoize_default( (text3, config6) => { const { fontSize = 12, fontFamily = "Arial", fontWeight = 400 } = config6; if (!text3) { return { width: 0, height: 0 }; } const [, _fontSizePx] = parseFontSize(fontSize); const fontFamilies = ["sans-serif", fontFamily]; const lines = text3.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]; }, (text3, config6) => `${text3}${config6.fontSize}${config6.fontWeight}${config6.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, parseFontSize, InitIDGenerator }; encodeEntities = /* @__PURE__ */ __name(function(text3) { let txt = text3; 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(text3) { return text3.replace(/fl°°/g, "&#").replace(/fl°/g, "&").replace(/¶ß/g, ";"); }, "decodeEntities"); getEdgeId = /* @__PURE__ */ __name((from2, to, { counter: counter2 = 0, prefix, suffix }) => { return `${prefix ? `${prefix}_` : ""}${from2}_${to}_${counter2}${suffix ? `_${suffix}` : ""}`; }, "getEdgeId"); __name(handleUndefinedAttr, "handleUndefinedAttr"); } }); // 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(diagram25, 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, diagram25, currentPersonOrSystemArray, currentPersonOrSystemKeys ); } parentBoundaryAlias = currentBoundary.alias; let nextCurrentBoundaries = diagObj.db.getBoundarys(parentBoundaryAlias); if (nextCurrentBoundaries.length > 0) { drawInsideBoundary( diagram25, parentBoundaryAlias, currentBounds, nextCurrentBoundaries, diagObj ); } if (currentBoundary.alias !== "global") { drawBoundary2(diagram25, 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(diagram25, 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(diagram25, boundary, conf); }, "drawBoundary"); drawC4ShapeArray = /* @__PURE__ */ __name(function(currentBounds, diagram25, 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(diagram25, c4Shape, conf); } currentBounds.bumpLastMargin(conf.c4ShapeMargin); }, "drawC4ShapeArray"); Point2 = class { static { __name(this, "Point"); } constructor(x5, y5) { this.x = x5; this.y = y5; } }; 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(diagram25, rels2, getC4ShapeObj, diagObj) { 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(diagram25, rels2, conf); }, "drawRels"); __name(drawInsideBoundary, "drawInsideBoundary"); draw = /* @__PURE__ */ __name(function(_text, id28, _version, diagObj) { conf = getConfig2().c4; const securityLevel = getConfig2().securityLevel; let sandboxElement; if (securityLevel === "sandbox") { sandboxElement = select_default2("#i" + id28); } const root4 = securityLevel === "sandbox" ? select_default2(sandboxElement.nodes()[0].contentDocument.body) : select_default2("body"); let db9 = diagObj.db; diagObj.db.setWrap(conf.wrap); c4ShapeInRow2 = db9.getC4ShapeInRow(); c4BoundaryInRow2 = db9.getC4BoundaryInRow(); log.debug(`C:${JSON.stringify(conf, null, 2)}`); const diagram25 = securityLevel === "sandbox" ? root4.select(`[id="${id28}"]`) : select_default2(`[id="${id28}"]`); svgDraw_default.insertComputerIcon(diagram25); svgDraw_default.insertDatabaseIcon(diagram25); svgDraw_default.insertClockIcon(diagram25); 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.getBoundarys(""); drawInsideBoundary(diagram25, "", screenBounds, currentBoundaries, diagObj); svgDraw_default.insertArrowHead(diagram25); svgDraw_default.insertArrowEnd(diagram25); svgDraw_default.insertArrowCrossHead(diagram25); svgDraw_default.insertArrowFilledHead(diagram25); drawRels2(diagram25, diagObj.db.getRels(), diagObj.db.getC4Shape, diagObj); 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) { diagram25.append("text").text(title2).attr("x", (box.stopx - box.startx) / 2 - 4 * conf.diagramMarginX).attr("y", box.starty + conf.diagramMarginY); } configureSvgSize(diagram25, height2, width3, conf.useMaxWidth); const extraVertForTitle = title2 ? 60 : 0; diagram25.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((options3) => `.person { stroke: ${options3.personBorder}; fill: ${options3.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/[email protected]/node_modules/marked/lib/marked.esm.js function _getDefaults() { return { async: false, breaks: false, extensions: null, gfm: true, hooks: null, pedantic: false, renderer: null, silent: false, tokenizer: null, walkTokens: null }; } function changeDefaults(newDefaults) { _defaults = newDefaults; } function escape$1(html2, encode) { if (encode) { if (escapeTest.test(html2)) { return html2.replace(escapeReplace, getEscapeReplacement); } } else { if (escapeTestNoEncode.test(html2)) { return html2.replace(escapeReplaceNoEncode, getEscapeReplacement); } } return html2; } function unescape2(html2) { return html2.replace(unescapeTest, (_2, n2) => { n2 = n2.toLowerCase(); if (n2 === "colon") return ":"; if (n2.charAt(0) === "#") { return n2.charAt(1) === "x" ? String.fromCharCode(parseInt(n2.substring(2), 16)) : String.fromCharCode(+n2.substring(1)); } return ""; }); } function edit(regex2, opt) { let source = typeof regex2 === "string" ? regex2 : regex2.source; opt = opt || ""; const obj = { replace: /* @__PURE__ */ __name((name, val) => { let valSource = typeof val === "string" ? val : val.source; valSource = valSource.replace(caret, "$1"); source = source.replace(name, valSource); return obj; }, "replace"), getRegex: /* @__PURE__ */ __name(() => { return new RegExp(source, opt); }, "getRegex") }; return obj; } function cleanUrl(href) { try { href = encodeURI(href).replace(/%25/g, "%"); } catch { return null; } return href; } function splitCells(tableRow, count) { const row = tableRow.replace(/\|/g, (match2, offset, str2) => { let escaped = false; let curr = offset; while (--curr >= 0 && str2[curr] === "\\") escaped = !escaped; if (escaped) { return "|"; } else { return " |"; } }), cells = row.split(/ \|/); let i2 = 0; if (!cells[0].trim()) { cells.shift(); } if (cells.length > 0 && !cells[cells.length - 1].trim()) { cells.pop(); } if (count) { if (cells.length > count) { cells.splice(count); } else { while (cells.length < count) cells.push(""); } } for (; i2 < cells.length; i2++) { cells[i2] = cells[i2].trim().replace(/\\\|/g, "|"); } return cells; } function rtrim(str2, c3, invert2) { const l2 = str2.length; if (l2 === 0) { return ""; } let suffLen = 0; while (suffLen < l2) { const currChar = str2.charAt(l2 - suffLen - 1); if (currChar === c3 && !invert2) { suffLen++; } else if (currChar !== c3 && invert2) { suffLen++; } else { break; } } return str2.slice(0, l2 - suffLen); } function findClosingBracket(str2, b2) { if (str2.indexOf(b2[1]) === -1) { return -1; } let level = 0; for (let i2 = 0; i2 < str2.length; i2++) { if (str2[i2] === "\\") { i2++; } else if (str2[i2] === b2[0]) { level++; } else if (str2[i2] === b2[1]) { level--; if (level < 0) { return i2; } } } return -1; } function outputLink(cap, link3, raw, lexer2) { const href = link3.href; const title2 = link3.title ? escape$1(link3.title) : null; const text3 = cap[1].replace(/\\([\[\]])/g, "$1"); if (cap[0].charAt(0) !== "!") { lexer2.state.inLink = true; const token2 = { type: "link", raw, href, title: title2, text: text3, tokens: lexer2.inlineTokens(text3) }; lexer2.state.inLink = false; return token2; } return { type: "image", raw, href, title: title2, text: escape$1(text3) }; } function indentCodeCompensation(raw, text3) { const matchIndentToCode = raw.match(/^(\s+)(?:```)/); if (matchIndentToCode === null) { return text3; } const indentToCode = matchIndentToCode[1]; return text3.split("\n").map((node2) => { const matchIndentInNode = node2.match(/^\s+/); if (matchIndentInNode === null) { return node2; } const [indentInNode] = matchIndentInNode; if (indentInNode.length >= indentToCode.length) { return node2.slice(indentToCode.length); } return node2; }).join("\n"); } function marked(src, opt) { return markedInstance.parse(src, opt); } var _defaults, escapeTest, escapeReplace, escapeTestNoEncode, escapeReplaceNoEncode, escapeReplacements, getEscapeReplacement, unescapeTest, caret, noopTest, _Tokenizer, newline, blockCode, fences, hr, heading, bullet, lheading, _paragraph, blockText, _blockLabel, def, list, _tag, _comment, html, paragraph, blockquote, blockNormal, gfmTable, blockGfm, blockPedantic, escape3, inlineCode, br, inlineText, _punctuation, punctuation, blockSkip, emStrongLDelim, emStrongRDelimAst, emStrongRDelimUnd, anyPunctuation, autolink, _inlineComment, tag, _inlineLabel, link, reflink, nolink, reflinkSearch, inlineNormal, inlinePedantic, inlineGfm, inlineBreaks, block, inline, _Lexer, _Renderer, _TextRenderer, _Parser, _Hooks, Marked, markedInstance, options, setOptions, use, walkTokens, parseInline, parser2, lexer; var init_marked_esm = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/marked/lib/marked.esm.js"() { "use strict"; __name(_getDefaults, "_getDefaults"); _defaults = _getDefaults(); __name(changeDefaults, "changeDefaults"); escapeTest = /[&<>"']/; escapeReplace = new RegExp(escapeTest.source, "g"); escapeTestNoEncode = /[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/; escapeReplaceNoEncode = new RegExp(escapeTestNoEncode.source, "g"); escapeReplacements = { "&": "&", "<": "<", ">": ">", '"': """, "'": "'" }; getEscapeReplacement = /* @__PURE__ */ __name((ch) => escapeReplacements[ch], "getEscapeReplacement"); __name(escape$1, "escape$1"); unescapeTest = /&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig; __name(unescape2, "unescape"); caret = /(^|[^\[])\^/g; __name(edit, "edit"); __name(cleanUrl, "cleanUrl"); noopTest = { exec: /* @__PURE__ */ __name(() => null, "exec") }; __name(splitCells, "splitCells"); __name(rtrim, "rtrim"); __name(findClosingBracket, "findClosingBracket"); __name(outputLink, "outputLink"); __name(indentCodeCompensation, "indentCodeCompensation"); _Tokenizer = class { static { __name(this, "_Tokenizer"); } options; rules; // set by the lexer lexer; // set by the lexer constructor(options3) { this.options = options3 || _defaults; } space(src) { const cap = this.rules.block.newline.exec(src); if (cap && cap[0].length > 0) { return { type: "space", raw: cap[0] }; } } code(src) { const cap = this.rules.block.code.exec(src); if (cap) { const text3 = cap[0].replace(/^ {1,4}/gm, ""); return { type: "code", raw: cap[0], codeBlockStyle: "indented", text: !this.options.pedantic ? rtrim(text3, "\n") : text3 }; } } fences(src) { const cap = this.rules.block.fences.exec(src); if (cap) { const raw = cap[0]; const text3 = indentCodeCompensation(raw, cap[3] || ""); return { type: "code", raw, lang: cap[2] ? cap[2].trim().replace(this.rules.inline.anyPunctuation, "$1") : cap[2], text: text3 }; } } heading(src) { const cap = this.rules.block.heading.exec(src); if (cap) { let text3 = cap[2].trim(); if (/#$/.test(text3)) { const trimmed = rtrim(text3, "#"); if (this.options.pedantic) { text3 = trimmed.trim(); } else if (!trimmed || / $/.test(trimmed)) { text3 = trimmed.trim(); } } return { type: "heading", raw: cap[0], depth: cap[1].length, text: text3, tokens: this.lexer.inline(text3) }; } } hr(src) { const cap = this.rules.block.hr.exec(src); if (cap) { return { type: "hr", raw: rtrim(cap[0], "\n") }; } } blockquote(src) { const cap = this.rules.block.blockquote.exec(src); if (cap) { let lines = rtrim(cap[0], "\n").split("\n"); let raw = ""; let text3 = ""; const tokens2 = []; while (lines.length > 0) { let inBlockquote = false; const currentLines = []; let i2; for (i2 = 0; i2 < lines.length; i2++) { if (/^ {0,3}>/.test(lines[i2])) { currentLines.push(lines[i2]); inBlockquote = true; } else if (!inBlockquote) { currentLines.push(lines[i2]); } else { break; } } lines = lines.slice(i2); const currentRaw = currentLines.join("\n"); const currentText = currentRaw.replace(/\n {0,3}((?:=+|-+) *)(?=\n|$)/g, "\n $1").replace(/^ {0,3}>[ \t]?/gm, ""); raw = raw ? `${raw} ${currentRaw}` : currentRaw; text3 = text3 ? `${text3} ${currentText}` : currentText; const top2 = this.lexer.state.top; this.lexer.state.top = true; this.lexer.blockTokens(currentText, tokens2, true); this.lexer.state.top = top2; if (lines.length === 0) { break; } const lastToken = tokens2[tokens2.length - 1]; if (lastToken?.type === "code") { break; } else if (lastToken?.type === "blockquote") { const oldToken = lastToken; const newText = oldToken.raw + "\n" + lines.join("\n"); const newToken = this.blockquote(newText); tokens2[tokens2.length - 1] = newToken; raw = raw.substring(0, raw.length - oldToken.raw.length) + newToken.raw; text3 = text3.substring(0, text3.length - oldToken.text.length) + newToken.text; break; } else if (lastToken?.type === "list") { const oldToken = lastToken; const newText = oldToken.raw + "\n" + lines.join("\n"); const newToken = this.list(newText); tokens2[tokens2.length - 1] = newToken; raw = raw.substring(0, raw.length - lastToken.raw.length) + newToken.raw; text3 = text3.substring(0, text3.length - oldToken.raw.length) + newToken.raw; lines = newText.substring(tokens2[tokens2.length - 1].raw.length).split("\n"); continue; } } return { type: "blockquote", raw, tokens: tokens2, text: text3 }; } } list(src) { let cap = this.rules.block.list.exec(src); if (cap) { let bull = cap[1].trim(); const isordered = bull.length > 1; const list2 = { type: "list", raw: "", ordered: isordered, start: isordered ? +bull.slice(0, -1) : "", loose: false, items: [] }; bull = isordered ? `\\d{1,9}\\${bull.slice(-1)}` : `\\${bull}`; if (this.options.pedantic) { bull = isordered ? bull : "[*+-]"; } const itemRegex = new RegExp(`^( {0,3}${bull})((?:[ ][^\\n]*)?(?:\\n|$))`); let endsWithBlankLine = false; while (src) { let endEarly = false; let raw = ""; let itemContents = ""; if (!(cap = itemRegex.exec(src))) { break; } if (this.rules.block.hr.test(src)) { break; } raw = cap[0]; src = src.substring(raw.length); let line2 = cap[2].split("\n", 1)[0].replace(/^\t+/, (t4) => " ".repeat(3 * t4.length)); let nextLine = src.split("\n", 1)[0]; let blankLine = !line2.trim(); let indent = 0; if (this.options.pedantic) { indent = 2; itemContents = line2.trimStart(); } else if (blankLine) { indent = cap[1].length + 1; } else { indent = cap[2].search(/[^ ]/); indent = indent > 4 ? 1 : indent; itemContents = line2.slice(indent); indent += cap[1].length; } if (blankLine && /^ *$/.test(nextLine)) { raw += nextLine + "\n"; src = src.substring(nextLine.length + 1); endEarly = true; } if (!endEarly) { const nextBulletRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`); const hrRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`); const fencesBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:\`\`\`|~~~)`); const headingBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}#`); while (src) { const rawLine = src.split("\n", 1)[0]; nextLine = rawLine; if (this.options.pedantic) { nextLine = nextLine.replace(/^ {1,4}(?=( {4})*[^ ])/g, " "); } if (fencesBeginRegex.test(nextLine)) { break; } if (headingBeginRegex.test(nextLine)) { break; } if (nextBulletRegex.test(nextLine)) { break; } if (hrRegex.test(src)) { break; } if (nextLine.search(/[^ ]/) >= indent || !nextLine.trim()) { itemContents += "\n" + nextLine.slice(indent); } else { if (blankLine) { break; } if (line2.search(/[^ ]/) >= 4) { break; } if (fencesBeginRegex.test(line2)) { break; } if (headingBeginRegex.test(line2)) { break; } if (hrRegex.test(line2)) { break; } itemContents += "\n" + nextLine; } if (!blankLine && !nextLine.trim()) { blankLine = true; } raw += rawLine + "\n"; src = src.substring(rawLine.length + 1); line2 = nextLine.slice(indent); } } if (!list2.loose) { if (endsWithBlankLine) { list2.loose = true; } else if (/\n *\n *$/.test(raw)) { endsWithBlankLine = true; } } let istask = null; let ischecked; if (this.options.gfm) { istask = /^\[[ xX]\] /.exec(itemContents); if (istask) { ischecked = istask[0] !== "[ ] "; itemContents = itemContents.replace(/^\[[ xX]\] +/, ""); } } list2.items.push({ type: "list_item", raw, task: !!istask, checked: ischecked, loose: false, text: itemContents, tokens: [] }); list2.raw += raw; } list2.items[list2.items.length - 1].raw = list2.items[list2.items.length - 1].raw.trimEnd(); list2.items[list2.items.length - 1].text = list2.items[list2.items.length - 1].text.trimEnd(); list2.raw = list2.raw.trimEnd(); for (let i2 = 0; i2 < list2.items.length; i2++) { this.lexer.state.top = false; list2.items[i2].tokens = this.lexer.blockTokens(list2.items[i2].text, []); if (!list2.loose) { const spacers = list2.items[i2].tokens.filter((t4) => t4.type === "space"); const hasMultipleLineBreaks = spacers.length > 0 && spacers.some((t4) => /\n.*\n/.test(t4.raw)); list2.loose = hasMultipleLineBreaks; } } if (list2.loose) { for (let i2 = 0; i2 < list2.items.length; i2++) { list2.items[i2].loose = true; } } return list2; } } html(src) { const cap = this.rules.block.html.exec(src); if (cap) { const token2 = { type: "html", block: true, raw: cap[0], pre: cap[1] === "pre" || cap[1] === "script" || cap[1] === "style", text: cap[0] }; return token2; } } def(src) { const cap = this.rules.block.def.exec(src); if (cap) { const tag2 = cap[1].toLowerCase().replace(/\s+/g, " "); const href = cap[2] ? cap[2].replace(/^<(.*)>$/, "$1").replace(this.rules.inline.anyPunctuation, "$1") : ""; const title2 = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline.anyPunctuation, "$1") : cap[3]; return { type: "def", tag: tag2, raw: cap[0], href, title: title2 }; } } table(src) { const cap = this.rules.block.table.exec(src); if (!cap) { return; } if (!/[:|]/.test(cap[2])) { return; } const headers = splitCells(cap[1]); const aligns = cap[2].replace(/^\||\| *$/g, "").split("|"); const rows = cap[3] && cap[3].trim() ? cap[3].replace(/\n[ \t]*$/, "").split("\n") : []; const item = { type: "table", raw: cap[0], header: [], align: [], rows: [] }; if (headers.length !== aligns.length) { return; } for (const align of aligns) { if (/^ *-+: *$/.test(align)) { item.align.push("right"); } else if (/^ *:-+: *$/.test(align)) { item.align.push("center"); } else if (/^ *:-+ *$/.test(align)) { item.align.push("left"); } else { item.align.push(null); } } for (let i2 = 0; i2 < headers.length; i2++) { item.header.push({ text: headers[i2], tokens: this.lexer.inline(headers[i2]), header: true, align: item.align[i2] }); } for (const row of rows) { item.rows.push(splitCells(row, item.header.length).map((cell, i2) => { return { text: cell, tokens: this.lexer.inline(cell), header: false, align: item.align[i2] }; })); } return item; } lheading(src) { const cap = this.rules.block.lheading.exec(src); if (cap) { return { type: "heading", raw: cap[0], depth: cap[2].charAt(0) === "=" ? 1 : 2, text: cap[1], tokens: this.lexer.inline(cap[1]) }; } } paragraph(src) { const cap = this.rules.block.paragraph.exec(src); if (cap) { const text3 = cap[1].charAt(cap[1].length - 1) === "\n" ? cap[1].slice(0, -1) : cap[1]; return { type: "paragraph", raw: cap[0], text: text3, tokens: this.lexer.inline(text3) }; } } text(src) { const cap = this.rules.block.text.exec(src); if (cap) { return { type: "text", raw: cap[0], text: cap[0], tokens: this.lexer.inline(cap[0]) }; } } escape(src) { const cap = this.rules.inline.escape.exec(src); if (cap) { return { type: "escape", raw: cap[0], text: escape$1(cap[1]) }; } } tag(src) { const cap = this.rules.inline.tag.exec(src); if (cap) { if (!this.lexer.state.inLink && /^/i.test(cap[0])) { this.lexer.state.inLink = false; } if (!this.lexer.state.inRawBlock && /^<(pre|code|kbd|script)(\s|>)/i.test(cap[0])) { this.lexer.state.inRawBlock = true; } else if (this.lexer.state.inRawBlock && /^<\/(pre|code|kbd|script)(\s|>)/i.test(cap[0])) { this.lexer.state.inRawBlock = false; } return { type: "html", raw: cap[0], inLink: this.lexer.state.inLink, inRawBlock: this.lexer.state.inRawBlock, block: false, text: cap[0] }; } } link(src) { const cap = this.rules.inline.link.exec(src); if (cap) { const trimmedUrl = cap[2].trim(); if (!this.options.pedantic && /^$/.test(trimmedUrl)) { return; } const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), "\\"); if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) { return; } } else { const lastParenIndex = findClosingBracket(cap[2], "()"); if (lastParenIndex > -1) { const start3 = cap[0].indexOf("!") === 0 ? 5 : 4; const linkLen = start3 + cap[1].length + lastParenIndex; cap[2] = cap[2].substring(0, lastParenIndex); cap[0] = cap[0].substring(0, linkLen).trim(); cap[3] = ""; } } let href = cap[2]; let title2 = ""; if (this.options.pedantic) { const link3 = /^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(href); if (link3) { href = link3[1]; title2 = link3[3]; } } else { title2 = cap[3] ? cap[3].slice(1, -1) : ""; } href = href.trim(); if (/^$/.test(trimmedUrl)) { href = href.slice(1); } else { href = href.slice(1, -1); } } return outputLink(cap, { href: href ? href.replace(this.rules.inline.anyPunctuation, "$1") : href, title: title2 ? title2.replace(this.rules.inline.anyPunctuation, "$1") : title2 }, cap[0], this.lexer); } } reflink(src, links3) { let cap; if ((cap = this.rules.inline.reflink.exec(src)) || (cap = this.rules.inline.nolink.exec(src))) { const linkString = (cap[2] || cap[1]).replace(/\s+/g, " "); const link3 = links3[linkString.toLowerCase()]; if (!link3) { const text3 = cap[0].charAt(0); return { type: "text", raw: text3, text: text3 }; } return outputLink(cap, link3, cap[0], this.lexer); } } emStrong(src, maskedSrc, prevChar = "") { let match2 = this.rules.inline.emStrongLDelim.exec(src); if (!match2) return; if (match2[3] && prevChar.match(/[\p{L}\p{N}]/u)) return; const nextChar = match2[1] || match2[2] || ""; if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) { const lLength = [...match2[0]].length - 1; let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0; const endReg = match2[0][0] === "*" ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd; endReg.lastIndex = 0; maskedSrc = maskedSrc.slice(-1 * src.length + lLength); while ((match2 = endReg.exec(maskedSrc)) != null) { rDelim = match2[1] || match2[2] || match2[3] || match2[4] || match2[5] || match2[6]; if (!rDelim) continue; rLength = [...rDelim].length; if (match2[3] || match2[4]) { delimTotal += rLength; continue; } else if (match2[5] || match2[6]) { if (lLength % 3 && !((lLength + rLength) % 3)) { midDelimTotal += rLength; continue; } } delimTotal -= rLength; if (delimTotal > 0) continue; rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal); const lastCharLength = [...match2[0]][0].length; const raw = src.slice(0, lLength + match2.index + lastCharLength + rLength); if (Math.min(lLength, rLength) % 2) { const text4 = raw.slice(1, -1); return { type: "em", raw, text: text4, tokens: this.lexer.inlineTokens(text4) }; } const text3 = raw.slice(2, -2); return { type: "strong", raw, text: text3, tokens: this.lexer.inlineTokens(text3) }; } } } codespan(src) { const cap = this.rules.inline.code.exec(src); if (cap) { let text3 = cap[2].replace(/\n/g, " "); const hasNonSpaceChars = /[^ ]/.test(text3); const hasSpaceCharsOnBothEnds = /^ /.test(text3) && / $/.test(text3); if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) { text3 = text3.substring(1, text3.length - 1); } text3 = escape$1(text3, true); return { type: "codespan", raw: cap[0], text: text3 }; } } br(src) { const cap = this.rules.inline.br.exec(src); if (cap) { return { type: "br", raw: cap[0] }; } } del(src) { const cap = this.rules.inline.del.exec(src); if (cap) { return { type: "del", raw: cap[0], text: cap[2], tokens: this.lexer.inlineTokens(cap[2]) }; } } autolink(src) { const cap = this.rules.inline.autolink.exec(src); if (cap) { let text3, href; if (cap[2] === "@") { text3 = escape$1(cap[1]); href = "mailto:" + text3; } else { text3 = escape$1(cap[1]); href = text3; } return { type: "link", raw: cap[0], text: text3, href, tokens: [ { type: "text", raw: text3, text: text3 } ] }; } } url(src) { let cap; if (cap = this.rules.inline.url.exec(src)) { let text3, href; if (cap[2] === "@") { text3 = escape$1(cap[0]); href = "mailto:" + text3; } else { let prevCapZero; do { prevCapZero = cap[0]; cap[0] = this.rules.inline._backpedal.exec(cap[0])?.[0] ?? ""; } while (prevCapZero !== cap[0]); text3 = escape$1(cap[0]); if (cap[1] === "www.") { href = "http://" + cap[0]; } else { href = cap[0]; } } return { type: "link", raw: cap[0], text: text3, href, tokens: [ { type: "text", raw: text3, text: text3 } ] }; } } inlineText(src) { const cap = this.rules.inline.text.exec(src); if (cap) { let text3; if (this.lexer.state.inRawBlock) { text3 = cap[0]; } else { text3 = escape$1(cap[0]); } return { type: "text", raw: cap[0], text: text3 }; } } }; newline = /^(?: *(?:\n|$))+/; blockCode = /^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/; fences = /^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/; hr = /^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/; heading = /^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/; bullet = /(?:[*+-]|\d{1,9}[.)])/; lheading = edit(/^(?!bull |blockCode|fences|blockquote|heading|html)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html))+?)\n {0,3}(=+|-+) *(?:\n+|$)/).replace(/bull/g, bullet).replace(/blockCode/g, / {4}/).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/).getRegex(); _paragraph = /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/; blockText = /^[^\n]+/; _blockLabel = /(?!\s*\])(?:\\.|[^\[\]\\])+/; def = edit(/^ {0,3}\[(label)\]: *(?:\n *)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/).replace("label", _blockLabel).replace("title", /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(); list = edit(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g, bullet).getRegex(); _tag = "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"; _comment = /|$))/; html = edit("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n *)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$))", "i").replace("comment", _comment).replace("tag", _tag).replace("attribute", / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(); paragraph = edit(_paragraph).replace("hr", hr).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", ")|<(?:script|pre|style|textarea|!--)").replace("tag", _tag).getRegex(); blockquote = edit(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph", paragraph).getRegex(); blockNormal = { blockquote, code: blockCode, def, fences, heading, hr, html, lheading, list, newline, paragraph, table: noopTest, text: blockText }; gfmTable = edit("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr", hr).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("blockquote", " {0,3}>").replace("code", " {4}[^\\n]").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)]) ").replace("html", ")|<(?:script|pre|style|textarea|!--)").replace("tag", _tag).getRegex(); blockGfm = { ...blockNormal, table: gfmTable, paragraph: edit(_paragraph).replace("hr", hr).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("|lheading", "").replace("table", gfmTable).replace("blockquote", " {0,3}>").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)]) ").replace("html", ")|<(?:script|pre|style|textarea|!--)").replace("tag", _tag).getRegex() }; blockPedantic = { ...blockNormal, html: edit(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment", _comment).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: /^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/, heading: /^(#{1,6})(.*)(?:\n+|$)/, fences: noopTest, // fences not supported lheading: /^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/, paragraph: edit(_paragraph).replace("hr", hr).replace("heading", " *#{1,6} *[^\n]").replace("lheading", lheading).replace("|table", "").replace("blockquote", " {0,3}>").replace("|fences", "").replace("|list", "").replace("|html", "").replace("|tag", "").getRegex() }; escape3 = /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/; inlineCode = /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/; br = /^( {2,}|\\)\n(?!\s*$)/; inlineText = /^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\]*?>/g; emStrongLDelim = edit(/^(?:\*+(?:((?!\*)[punct])|[^\s*]))|^_+(?:((?!_)[punct])|([^\s_]))/, "u").replace(/punct/g, _punctuation).getRegex(); emStrongRDelimAst = edit("^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)[punct](\\*+)(?=[\\s]|$)|[^punct\\s](\\*+)(?!\\*)(?=[punct\\s]|$)|(?!\\*)[punct\\s](\\*+)(?=[^punct\\s])|[\\s](\\*+)(?!\\*)(?=[punct])|(?!\\*)[punct](\\*+)(?!\\*)(?=[punct])|[^punct\\s](\\*+)(?=[^punct\\s])", "gu").replace(/punct/g, _punctuation).getRegex(); emStrongRDelimUnd = edit("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)[punct](_+)(?=[\\s]|$)|[^punct\\s](_+)(?!_)(?=[punct\\s]|$)|(?!_)[punct\\s](_+)(?=[^punct\\s])|[\\s](_+)(?!_)(?=[punct])|(?!_)[punct](_+)(?!_)(?=[punct])", "gu").replace(/punct/g, _punctuation).getRegex(); anyPunctuation = edit(/\\([punct])/, "gu").replace(/punct/g, _punctuation).getRegex(); autolink = edit(/^<(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(); _inlineComment = edit(_comment).replace("(?:-->|$)", "-->").getRegex(); tag = edit("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment", _inlineComment).replace("attribute", /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(); _inlineLabel = /(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/; link = edit(/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/).replace("label", _inlineLabel).replace("href", /<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/).replace("title", /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(); reflink = edit(/^!?\[(label)\]\[(ref)\]/).replace("label", _inlineLabel).replace("ref", _blockLabel).getRegex(); nolink = edit(/^!?\[(ref)\](?:\[\])?/).replace("ref", _blockLabel).getRegex(); reflinkSearch = edit("reflink|nolink(?!\\()", "g").replace("reflink", reflink).replace("nolink", nolink).getRegex(); inlineNormal = { _backpedal: noopTest, // only used for GFM url anyPunctuation, autolink, blockSkip, br, code: inlineCode, del: noopTest, emStrongLDelim, emStrongRDelimAst, emStrongRDelimUnd, escape: escape3, link, nolink, punctuation, reflink, reflinkSearch, tag, text: inlineText, url: noopTest }; inlinePedantic = { ...inlineNormal, link: edit(/^!?\[(label)\]\((.*?)\)/).replace("label", _inlineLabel).getRegex(), reflink: edit(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label", _inlineLabel).getRegex() }; inlineGfm = { ...inlineNormal, escape: edit(escape3).replace("])", "~|])").getRegex(), url: edit(/^((?: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~])\1(?=[^~]|$)/, text: /^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\ { return leading + " ".repeat(tabs.length); }); } let token2; let lastToken; let cutSrc; while (src) { if (this.options.extensions && this.options.extensions.block && this.options.extensions.block.some((extTokenizer) => { if (token2 = extTokenizer.call({ lexer: this }, src, tokens2)) { src = src.substring(token2.raw.length); tokens2.push(token2); return true; } return false; })) { continue; } if (token2 = this.tokenizer.space(src)) { src = src.substring(token2.raw.length); if (token2.raw.length === 1 && tokens2.length > 0) { tokens2[tokens2.length - 1].raw += "\n"; } else { tokens2.push(token2); } continue; } if (token2 = this.tokenizer.code(src)) { src = src.substring(token2.raw.length); lastToken = tokens2[tokens2.length - 1]; if (lastToken && (lastToken.type === "paragraph" || lastToken.type === "text")) { lastToken.raw += "\n" + token2.raw; lastToken.text += "\n" + token2.text; this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text; } else { tokens2.push(token2); } continue; } if (token2 = this.tokenizer.fences(src)) { src = src.substring(token2.raw.length); tokens2.push(token2); continue; } if (token2 = this.tokenizer.heading(src)) { src = src.substring(token2.raw.length); tokens2.push(token2); continue; } if (token2 = this.tokenizer.hr(src)) { src = src.substring(token2.raw.length); tokens2.push(token2); continue; } if (token2 = this.tokenizer.blockquote(src)) { src = src.substring(token2.raw.length); tokens2.push(token2); continue; } if (token2 = this.tokenizer.list(src)) { src = src.substring(token2.raw.length); tokens2.push(token2); continue; } if (token2 = this.tokenizer.html(src)) { src = src.substring(token2.raw.length); tokens2.push(token2); continue; } if (token2 = this.tokenizer.def(src)) { src = src.substring(token2.raw.length); lastToken = tokens2[tokens2.length - 1]; if (lastToken && (lastToken.type === "paragraph" || lastToken.type === "text")) { lastToken.raw += "\n" + token2.raw; lastToken.text += "\n" + token2.raw; this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text; } else if (!this.tokens.links[token2.tag]) { this.tokens.links[token2.tag] = { href: token2.href, title: token2.title }; } continue; } if (token2 = this.tokenizer.table(src)) { src = src.substring(token2.raw.length); tokens2.push(token2); continue; } if (token2 = this.tokenizer.lheading(src)) { src = src.substring(token2.raw.length); tokens2.push(token2); continue; } cutSrc = src; if (this.options.extensions && this.options.extensions.startBlock) { let startIndex = Infinity; const tempSrc = src.slice(1); let tempStart; this.options.extensions.startBlock.forEach((getStartIndex) => { tempStart = getStartIndex.call({ lexer: this }, tempSrc); if (typeof tempStart === "number" && tempStart >= 0) { startIndex = Math.min(startIndex, tempStart); } }); if (startIndex < Infinity && startIndex >= 0) { cutSrc = src.substring(0, startIndex + 1); } } if (this.state.top && (token2 = this.tokenizer.paragraph(cutSrc))) { lastToken = tokens2[tokens2.length - 1]; if (lastParagraphClipped && lastToken?.type === "paragraph") { lastToken.raw += "\n" + token2.raw; lastToken.text += "\n" + token2.text; this.inlineQueue.pop(); this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text; } else { tokens2.push(token2); } lastParagraphClipped = cutSrc.length !== src.length; src = src.substring(token2.raw.length); continue; } if (token2 = this.tokenizer.text(src)) { src = src.substring(token2.raw.length); lastToken = tokens2[tokens2.length - 1]; if (lastToken && lastToken.type === "text") { lastToken.raw += "\n" + token2.raw; lastToken.text += "\n" + token2.text; this.inlineQueue.pop(); this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text; } else { tokens2.push(token2); } continue; } if (src) { const errMsg = "Infinite loop on byte: " + src.charCodeAt(0); if (this.options.silent) { console.error(errMsg); break; } else { throw new Error(errMsg); } } } this.state.top = true; return tokens2; } inline(src, tokens2 = []) { this.inlineQueue.push({ src, tokens: tokens2 }); return tokens2; } /** * Lexing/Compiling */ inlineTokens(src, tokens2 = []) { let token2, lastToken, cutSrc; let maskedSrc = src; let match2; let keepPrevChar, prevChar; if (this.tokens.links) { const links3 = Object.keys(this.tokens.links); if (links3.length > 0) { while ((match2 = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) { if (links3.includes(match2[0].slice(match2[0].lastIndexOf("[") + 1, -1))) { maskedSrc = maskedSrc.slice(0, match2.index) + "[" + "a".repeat(match2[0].length - 2) + "]" + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex); } } } } while ((match2 = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) { maskedSrc = maskedSrc.slice(0, match2.index) + "[" + "a".repeat(match2[0].length - 2) + "]" + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex); } while ((match2 = this.tokenizer.rules.inline.anyPunctuation.exec(maskedSrc)) != null) { maskedSrc = maskedSrc.slice(0, match2.index) + "++" + maskedSrc.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex); } while (src) { if (!keepPrevChar) { prevChar = ""; } keepPrevChar = false; if (this.options.extensions && this.options.extensions.inline && this.options.extensions.inline.some((extTokenizer) => { if (token2 = extTokenizer.call({ lexer: this }, src, tokens2)) { src = src.substring(token2.raw.length); tokens2.push(token2); return true; } return false; })) { continue; } if (token2 = this.tokenizer.escape(src)) { src = src.substring(token2.raw.length); tokens2.push(token2); continue; } if (token2 = this.tokenizer.tag(src)) { src = src.substring(token2.raw.length); lastToken = tokens2[tokens2.length - 1]; if (lastToken && token2.type === "text" && lastToken.type === "text") { lastToken.raw += token2.raw; lastToken.text += token2.text; } else { tokens2.push(token2); } continue; } if (token2 = this.tokenizer.link(src)) { src = src.substring(token2.raw.length); tokens2.push(token2); continue; } if (token2 = this.tokenizer.reflink(src, this.tokens.links)) { src = src.substring(token2.raw.length); lastToken = tokens2[tokens2.length - 1]; if (lastToken && token2.type === "text" && lastToken.type === "text") { lastToken.raw += token2.raw; lastToken.text += token2.text; } else { tokens2.push(token2); } continue; } if (token2 = this.tokenizer.emStrong(src, maskedSrc, prevChar)) { src = src.substring(token2.raw.length); tokens2.push(token2); continue; } if (token2 = this.tokenizer.codespan(src)) { src = src.substring(token2.raw.length); tokens2.push(token2); continue; } if (token2 = this.tokenizer.br(src)) { src = src.substring(token2.raw.length); tokens2.push(token2); continue; } if (token2 = this.tokenizer.del(src)) { src = src.substring(token2.raw.length); tokens2.push(token2); continue; } if (token2 = this.tokenizer.autolink(src)) { src = src.substring(token2.raw.length); tokens2.push(token2); continue; } if (!this.state.inLink && (token2 = this.tokenizer.url(src))) { src = src.substring(token2.raw.length); tokens2.push(token2); continue; } cutSrc = src; if (this.options.extensions && this.options.extensions.startInline) { let startIndex = Infinity; const tempSrc = src.slice(1); let tempStart; this.options.extensions.startInline.forEach((getStartIndex) => { tempStart = getStartIndex.call({ lexer: this }, tempSrc); if (typeof tempStart === "number" && tempStart >= 0) { startIndex = Math.min(startIndex, tempStart); } }); if (startIndex < Infinity && startIndex >= 0) { cutSrc = src.substring(0, startIndex + 1); } } if (token2 = this.tokenizer.inlineText(cutSrc)) { src = src.substring(token2.raw.length); if (token2.raw.slice(-1) !== "_") { prevChar = token2.raw.slice(-1); } keepPrevChar = true; lastToken = tokens2[tokens2.length - 1]; if (lastToken && lastToken.type === "text") { lastToken.raw += token2.raw; lastToken.text += token2.text; } else { tokens2.push(token2); } continue; } if (src) { const errMsg = "Infinite loop on byte: " + src.charCodeAt(0); if (this.options.silent) { console.error(errMsg); break; } else { throw new Error(errMsg); } } } return tokens2; } }; _Renderer = class { static { __name(this, "_Renderer"); } options; parser; // set by the parser constructor(options3) { this.options = options3 || _defaults; } space(token2) { return ""; } code({ text: text3, lang, escaped }) { const langString = (lang || "").match(/^\S*/)?.[0]; const code = text3.replace(/\n$/, "") + "\n"; if (!langString) { return "
" + (escaped ? code : escape$1(code, true)) + "
\n"; } return '
' + (escaped ? code : escape$1(code, true)) + "
\n"; } blockquote({ tokens: tokens2 }) { const body = this.parser.parse(tokens2); return `
${body}
`; } html({ text: text3 }) { return text3; } heading({ tokens: tokens2, depth }) { return `${this.parser.parseInline(tokens2)} `; } hr(token2) { return "
\n"; } list(token2) { const ordered = token2.ordered; const start3 = token2.start; let body = ""; for (let j2 = 0; j2 < token2.items.length; j2++) { const item = token2.items[j2]; body += this.listitem(item); } const type3 = ordered ? "ol" : "ul"; const startAttr = ordered && start3 !== 1 ? ' start="' + start3 + '"' : ""; return "<" + type3 + startAttr + ">\n" + body + "\n"; } listitem(item) { let itemBody = ""; if (item.task) { const checkbox = this.checkbox({ checked: !!item.checked }); if (item.loose) { if (item.tokens.length > 0 && item.tokens[0].type === "paragraph") { item.tokens[0].text = checkbox + " " + item.tokens[0].text; if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === "text") { item.tokens[0].tokens[0].text = checkbox + " " + item.tokens[0].tokens[0].text; } } else { item.tokens.unshift({ type: "text", raw: checkbox + " ", text: checkbox + " " }); } } else { itemBody += checkbox + " "; } } itemBody += this.parser.parse(item.tokens, !!item.loose); return `
  • ${itemBody}
  • `; } checkbox({ checked }) { return "'; } paragraph({ tokens: tokens2 }) { return `

    ${this.parser.parseInline(tokens2)}

    `; } table(token2) { let header = ""; let cell = ""; for (let j2 = 0; j2 < token2.header.length; j2++) { cell += this.tablecell(token2.header[j2]); } header += this.tablerow({ text: cell }); let body = ""; for (let j2 = 0; j2 < token2.rows.length; j2++) { const row = token2.rows[j2]; cell = ""; for (let k2 = 0; k2 < row.length; k2++) { cell += this.tablecell(row[k2]); } body += this.tablerow({ text: cell }); } if (body) body = `${body}`; return "\n\n" + header + "\n" + body + "
    \n"; } tablerow({ text: text3 }) { return ` ${text3} `; } tablecell(token2) { const content = this.parser.parseInline(token2.tokens); const type3 = token2.header ? "th" : "td"; const tag2 = token2.align ? `<${type3} align="${token2.align}">` : `<${type3}>`; return tag2 + content + ` `; } /** * span level renderer */ strong({ tokens: tokens2 }) { return `${this.parser.parseInline(tokens2)}`; } em({ tokens: tokens2 }) { return `${this.parser.parseInline(tokens2)}`; } codespan({ text: text3 }) { return `${text3}`; } br(token2) { return "
    "; } del({ tokens: tokens2 }) { return `${this.parser.parseInline(tokens2)}`; } link({ href, title: title2, tokens: tokens2 }) { const text3 = this.parser.parseInline(tokens2); const cleanHref = cleanUrl(href); if (cleanHref === null) { return text3; } href = cleanHref; let out = '
    "; return out; } image({ href, title: title2, text: text3 }) { const cleanHref = cleanUrl(href); if (cleanHref === null) { return text3; } href = cleanHref; let out = `${text3} { const tokens3 = genericToken[childTokens].flat(Infinity); values2 = values2.concat(this.walkTokens(tokens3, callback)); }); } else if (genericToken.tokens) { values2 = values2.concat(this.walkTokens(genericToken.tokens, callback)); } } } } return values2; } use(...args) { const extensions2 = this.defaults.extensions || { renderers: {}, childTokens: {} }; args.forEach((pack) => { const opts = { ...pack }; opts.async = this.defaults.async || opts.async || false; if (pack.extensions) { pack.extensions.forEach((ext) => { if (!ext.name) { throw new Error("extension name required"); } if ("renderer" in ext) { const prevRenderer = extensions2.renderers[ext.name]; if (prevRenderer) { extensions2.renderers[ext.name] = function(...args2) { let ret = ext.renderer.apply(this, args2); if (ret === false) { ret = prevRenderer.apply(this, args2); } return ret; }; } else { extensions2.renderers[ext.name] = ext.renderer; } } if ("tokenizer" in ext) { if (!ext.level || ext.level !== "block" && ext.level !== "inline") { throw new Error("extension level must be 'block' or 'inline'"); } const extLevel = extensions2[ext.level]; if (extLevel) { extLevel.unshift(ext.tokenizer); } else { extensions2[ext.level] = [ext.tokenizer]; } if (ext.start) { if (ext.level === "block") { if (extensions2.startBlock) { extensions2.startBlock.push(ext.start); } else { extensions2.startBlock = [ext.start]; } } else if (ext.level === "inline") { if (extensions2.startInline) { extensions2.startInline.push(ext.start); } else { extensions2.startInline = [ext.start]; } } } } if ("childTokens" in ext && ext.childTokens) { extensions2.childTokens[ext.name] = ext.childTokens; } }); opts.extensions = extensions2; } if (pack.renderer) { const renderer8 = this.defaults.renderer || new _Renderer(this.defaults); for (const prop in pack.renderer) { if (!(prop in renderer8)) { throw new Error(`renderer '${prop}' does not exist`); } if (["options", "parser"].includes(prop)) { continue; } const rendererProp = prop; let rendererFunc = pack.renderer[rendererProp]; if (!pack.useNewRenderer) { rendererFunc = this.#convertRendererFunction(rendererFunc, rendererProp, renderer8); } const prevRenderer = renderer8[rendererProp]; renderer8[rendererProp] = (...args2) => { let ret = rendererFunc.apply(renderer8, args2); if (ret === false) { ret = prevRenderer.apply(renderer8, args2); } return ret || ""; }; } opts.renderer = renderer8; } if (pack.tokenizer) { const tokenizer = this.defaults.tokenizer || new _Tokenizer(this.defaults); for (const prop in pack.tokenizer) { if (!(prop in tokenizer)) { throw new Error(`tokenizer '${prop}' does not exist`); } if (["options", "rules", "lexer"].includes(prop)) { continue; } const tokenizerProp = prop; const tokenizerFunc = pack.tokenizer[tokenizerProp]; const prevTokenizer = tokenizer[tokenizerProp]; tokenizer[tokenizerProp] = (...args2) => { let ret = tokenizerFunc.apply(tokenizer, args2); if (ret === false) { ret = prevTokenizer.apply(tokenizer, args2); } return ret; }; } opts.tokenizer = tokenizer; } if (pack.hooks) { const hooks = this.defaults.hooks || new _Hooks(); for (const prop in pack.hooks) { if (!(prop in hooks)) { throw new Error(`hook '${prop}' does not exist`); } if (prop === "options") { continue; } const hooksProp = prop; const hooksFunc = pack.hooks[hooksProp]; const prevHook = hooks[hooksProp]; if (_Hooks.passThroughHooks.has(prop)) { hooks[hooksProp] = (arg) => { if (this.defaults.async) { return Promise.resolve(hooksFunc.call(hooks, arg)).then((ret2) => { return prevHook.call(hooks, ret2); }); } const ret = hooksFunc.call(hooks, arg); return prevHook.call(hooks, ret); }; } else { hooks[hooksProp] = (...args2) => { let ret = hooksFunc.apply(hooks, args2); if (ret === false) { ret = prevHook.apply(hooks, args2); } return ret; }; } } opts.hooks = hooks; } if (pack.walkTokens) { const walkTokens2 = this.defaults.walkTokens; const packWalktokens = pack.walkTokens; opts.walkTokens = function(token2) { let values2 = []; values2.push(packWalktokens.call(this, token2)); if (walkTokens2) { values2 = values2.concat(walkTokens2.call(this, token2)); } return values2; }; } this.defaults = { ...this.defaults, ...opts }; }); return this; } // TODO: Remove this in next major release #convertRendererFunction(func, prop, renderer8) { switch (prop) { case "heading": return function(token2) { if (!token2.type || token2.type !== prop) { return func.apply(this, arguments); } return func.call(this, renderer8.parser.parseInline(token2.tokens), token2.depth, unescape2(renderer8.parser.parseInline(token2.tokens, renderer8.parser.textRenderer))); }; case "code": return function(token2) { if (!token2.type || token2.type !== prop) { return func.apply(this, arguments); } return func.call(this, token2.text, token2.lang, !!token2.escaped); }; case "table": return function(token2) { if (!token2.type || token2.type !== prop) { return func.apply(this, arguments); } let header = ""; let cell = ""; for (let j2 = 0; j2 < token2.header.length; j2++) { cell += this.tablecell({ text: token2.header[j2].text, tokens: token2.header[j2].tokens, header: true, align: token2.align[j2] }); } header += this.tablerow({ text: cell }); let body = ""; for (let j2 = 0; j2 < token2.rows.length; j2++) { const row = token2.rows[j2]; cell = ""; for (let k2 = 0; k2 < row.length; k2++) { cell += this.tablecell({ text: row[k2].text, tokens: row[k2].tokens, header: false, align: token2.align[k2] }); } body += this.tablerow({ text: cell }); } return func.call(this, header, body); }; case "blockquote": return function(token2) { if (!token2.type || token2.type !== prop) { return func.apply(this, arguments); } const body = this.parser.parse(token2.tokens); return func.call(this, body); }; case "list": return function(token2) { if (!token2.type || token2.type !== prop) { return func.apply(this, arguments); } const ordered = token2.ordered; const start3 = token2.start; const loose = token2.loose; let body = ""; for (let j2 = 0; j2 < token2.items.length; j2++) { const item = token2.items[j2]; const checked = item.checked; const task = item.task; let itemBody = ""; if (item.task) { const checkbox = this.checkbox({ checked: !!checked }); if (loose) { if (item.tokens.length > 0 && item.tokens[0].type === "paragraph") { item.tokens[0].text = checkbox + " " + item.tokens[0].text; if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === "text") { item.tokens[0].tokens[0].text = checkbox + " " + item.tokens[0].tokens[0].text; } } else { item.tokens.unshift({ type: "text", text: checkbox + " " }); } } else { itemBody += checkbox + " "; } } itemBody += this.parser.parse(item.tokens, loose); body += this.listitem({ type: "list_item", raw: itemBody, text: itemBody, task, checked: !!checked, loose, tokens: item.tokens }); } return func.call(this, body, ordered, start3); }; case "html": return function(token2) { if (!token2.type || token2.type !== prop) { return func.apply(this, arguments); } return func.call(this, token2.text, token2.block); }; case "paragraph": return function(token2) { if (!token2.type || token2.type !== prop) { return func.apply(this, arguments); } return func.call(this, this.parser.parseInline(token2.tokens)); }; case "escape": return function(token2) { if (!token2.type || token2.type !== prop) { return func.apply(this, arguments); } return func.call(this, token2.text); }; case "link": return function(token2) { if (!token2.type || token2.type !== prop) { return func.apply(this, arguments); } return func.call(this, token2.href, token2.title, this.parser.parseInline(token2.tokens)); }; case "image": return function(token2) { if (!token2.type || token2.type !== prop) { return func.apply(this, arguments); } return func.call(this, token2.href, token2.title, token2.text); }; case "strong": return function(token2) { if (!token2.type || token2.type !== prop) { return func.apply(this, arguments); } return func.call(this, this.parser.parseInline(token2.tokens)); }; case "em": return function(token2) { if (!token2.type || token2.type !== prop) { return func.apply(this, arguments); } return func.call(this, this.parser.parseInline(token2.tokens)); }; case "codespan": return function(token2) { if (!token2.type || token2.type !== prop) { return func.apply(this, arguments); } return func.call(this, token2.text); }; case "del": return function(token2) { if (!token2.type || token2.type !== prop) { return func.apply(this, arguments); } return func.call(this, this.parser.parseInline(token2.tokens)); }; case "text": return function(token2) { if (!token2.type || token2.type !== prop) { return func.apply(this, arguments); } return func.call(this, token2.text); }; } return func; } setOptions(opt) { this.defaults = { ...this.defaults, ...opt }; return this; } lexer(src, options3) { return _Lexer.lex(src, options3 ?? this.defaults); } parser(tokens2, options3) { return _Parser.parse(tokens2, options3 ?? this.defaults); } #parseMarkdown(lexer2, parser23) { return (src, options3) => { const origOpt = { ...options3 }; const opt = { ...this.defaults, ...origOpt }; if (this.defaults.async === true && origOpt.async === false) { if (!opt.silent) { console.warn("marked(): The async option was set to true by an extension. The async: false option sent to parse will be ignored."); } opt.async = true; } const throwError2 = this.#onError(!!opt.silent, !!opt.async); if (typeof src === "undefined" || src === null) { return throwError2(new Error("marked(): input parameter is undefined or null")); } if (typeof src !== "string") { return throwError2(new Error("marked(): input parameter is of type " + Object.prototype.toString.call(src) + ", string expected")); } if (opt.hooks) { opt.hooks.options = opt; } if (opt.async) { return Promise.resolve(opt.hooks ? opt.hooks.preprocess(src) : src).then((src2) => lexer2(src2, opt)).then((tokens2) => opt.hooks ? opt.hooks.processAllTokens(tokens2) : tokens2).then((tokens2) => opt.walkTokens ? Promise.all(this.walkTokens(tokens2, opt.walkTokens)).then(() => tokens2) : tokens2).then((tokens2) => parser23(tokens2, opt)).then((html2) => opt.hooks ? opt.hooks.postprocess(html2) : html2).catch(throwError2); } try { if (opt.hooks) { src = opt.hooks.preprocess(src); } let tokens2 = lexer2(src, opt); if (opt.hooks) { tokens2 = opt.hooks.processAllTokens(tokens2); } if (opt.walkTokens) { this.walkTokens(tokens2, opt.walkTokens); } let html2 = parser23(tokens2, opt); if (opt.hooks) { html2 = opt.hooks.postprocess(html2); } return html2; } catch (e3) { return throwError2(e3); } }; } #onError(silent, async) { return (e3) => { e3.message += "\nPlease report this to https://github.com/markedjs/marked."; if (silent) { const msg = "

    An error occurred:

    " + escape$1(e3.message + "", true) + "
    "; if (async) { return Promise.resolve(msg); } return msg; } if (async) { return Promise.reject(e3); } throw e3; }; } }; markedInstance = new Marked(); __name(marked, "marked"); marked.options = marked.setOptions = function(options3) { markedInstance.setOptions(options3); marked.defaults = markedInstance.defaults; changeDefaults(marked.defaults); return marked; }; marked.getDefaults = _getDefaults; marked.defaults = _defaults; marked.use = function(...args) { markedInstance.use(...args); marked.defaults = markedInstance.defaults; changeDefaults(marked.defaults); return marked; }; marked.walkTokens = function(tokens2, callback) { return markedInstance.walkTokens(tokens2, callback); }; marked.parseInline = markedInstance.parseInline; marked.Parser = _Parser; marked.parser = _Parser.parse; marked.Renderer = _Renderer; marked.TextRenderer = _TextRenderer; marked.Lexer = _Lexer; marked.lexer = _Lexer.lex; marked.Tokenizer = _Tokenizer; marked.Hooks = _Hooks; marked.parse = marked; options = marked.options; setOptions = marked.setOptions; use = marked.use; walkTokens = marked.walkTokens; parseInline = marked.parseInline; parser2 = _Parser.parse; lexer = _Lexer.lex; } }); // src/rendering-util/handle-markdown-text.ts function preprocessMarkdown(markdown, { markdownAutoWrap }) { const withoutBR = markdown.replace(//g, "\n"); const withoutMultipleNewlines = withoutBR.replace(/\n{2,}/g, "\n"); const withoutExtraSpaces = dedent(withoutMultipleNewlines); if (markdownAutoWrap === false) { return withoutExtraSpaces.replace(/ /g, " "); } return withoutExtraSpaces; } function markdownToLines(markdown, config6 = {}) { const preprocessedMarkdown = preprocessMarkdown(markdown, config6); const nodes7 = marked.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(/'/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"); nodes7.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" }); } }); return lines; } function markdownToHTML(markdown, { markdownAutoWrap } = {}) { const nodes7 = marked.lexer(markdown); function output2(node2) { if (node2.type === "text") { if (markdownAutoWrap === false) { return node2.text.replace(/\n */g, "
    ").replace(/ /g, " "); } return node2.text.replace(/\n */g, "
    "); } else if (node2.type === "strong") { return `${node2.tokens?.map(output2).join("")}`; } else if (node2.type === "em") { return `${node2.tokens?.map(output2).join("")}`; } else if (node2.type === "paragraph") { return `

    ${node2.tokens?.map(output2).join("")}

    `; } else if (node2.type === "space") { return ""; } else if (node2.type === "html") { return `${node2.text}`; } else if (node2.type === "escape") { return node2.text; } return `Unsupported markdown: ${node2.type}`; } __name(output2, "output"); return nodes7.map(output2).join(""); } var init_handle_markdown_text = __esm({ "src/rendering-util/handle-markdown-text.ts"() { "use strict"; init_marked_esm(); init_esm(); __name(preprocessMarkdown, "preprocessMarkdown"); __name(markdownToLines, "markdownToLines"); __name(markdownToHTML, "markdownToHTML"); } }); // src/rendering-util/splitText.ts function splitTextToChars(text3) { if (Intl.Segmenter) { return [...new Intl.Segmenter().segment(text3)].map((s2) => s2.segment); } return [...text3]; } 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, classes6, addBackground = false) { const fo = element3.append("foreignObject"); fo.attr("width", `${10 * width3}px`); fo.attr("height", `${10 * width3}px`); const div = fo.append("xhtml:div"); let label = node2.label; if (node2.label && hasKatex(node2.label)) { label = await renderKatex(node2.label.replace(common_default.lineBreakRegex, "\n"), getConfig2()); } const labelClass = node2.isNode ? "nodeLabel" : "edgeLabel"; const span = div.append("span"); span.html(label); applyStyle(span, node2.labelStyle); span.attr("class", `${labelClass} ${classes6}`); applyStyle(div, node2.labelStyle); div.style("display", "table-cell"); div.style("white-space", "nowrap"); div.style("line-height", "1.5"); 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) { return textElement.append("tspan").attr("class", "text-outer-tspan").attr("x", 0).attr("y", lineIndex * lineHeight - 0.1 + "em").attr("dy", lineHeight + "em"); } 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, text3) { const testElement = parentNode.append("text"); const testSpan = createTspan(testElement, 1, lineHeight); updateTextContentAndStyles(testSpan, [{ content: text3, type: "normal" }]); const textDimension = testSpan.node()?.getBoundingClientRect(); if (textDimension) { testElement.remove(); } return textDimension; } function createFormattedText(width3, g2, structuredText, addBackground = 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"); 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); updateTextContentAndStyles(tspan, preparedLine); lineIndex++; } } if (addBackground) { const bbox = textElement.node().getBBox(); const padding2 = 2; bkg.attr("x", bbox.x - padding2).attr("y", bbox.y - padding2).attr("width", bbox.width + 2 * padding2).attr("height", bbox.height + 2 * padding2); return labelGroup.node(); } else { return textElement.node(); } } 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(word.content); } else { innerTspan.text(" " + word.content); } }); } function replaceIconSubstring(text3) { return text3.replace( /fa[bklrs]?:fa-[\w-]+/g, // cspell: disable-line (s2) => `` ); } var createText; var init_createText = __esm({ "src/rendering-util/createText.ts"() { "use strict"; init_diagramAPI(); init_common(); init_src32(); init_logger(); init_handle_markdown_text(); init_utils2(); init_splitText(); __name(applyStyle, "applyStyle"); __name(addHtmlSpan, "addHtmlSpan"); __name(createTspan, "createTspan"); __name(computeWidthOfText, "computeWidthOfText"); __name(computeDimensionOfText, "computeDimensionOfText"); __name(createFormattedText, "createFormattedText"); __name(updateTextContentAndStyles, "updateTextContentAndStyles"); __name(replaceIconSubstring, "replaceIconSubstring"); createText = /* @__PURE__ */ __name(async (el, text3 = "", { style: style3 = "", isTitle = false, classes: classes6 = "", useHtmlLabels = true, isNode: isNode2 = true, width: width3 = 200, addSvgBackground = false } = {}, config6) => { log.debug( "XYZ createText", text3, style3, isTitle, classes6, useHtmlLabels, isNode2, "addSvgBackground: ", addSvgBackground ); if (useHtmlLabels) { const htmlText = markdownToHTML(text3, config6); const decodedReplacedText = replaceIconSubstring(decodeEntities(htmlText)); const inputForKatex = text3.replace(/\\\\/g, "\\"); const node2 = { isNode: isNode2, label: hasKatex(text3) ? inputForKatex : decodedReplacedText, labelStyle: style3.replace("fill:", "color:") }; const vertexNode = await addHtmlSpan(el, node2, width3, classes6, addSvgBackground); return vertexNode; } else { const sanitizeBR = text3.replace(//g, "
    "); const structuredText = markdownToLines(sanitizeBR.replace("
    ", "
    "), config6); const svgLabel = createFormattedText( width3, el, structuredText, text3 ? addSvgBackground : false ); 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); } return svgLabel; } }, "createText"); } }); // 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 y5 = midY + amplitude * Math.sin(frequency * (x5 - x1)); points.push({ x: x5, y: y5 }); } 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 y5 = centerY + radius2 * Math.sin(angle2); points.push({ x: -x5, y: -y5 }); } return points; } var labelHelper, insertLabel, updateNodeBounds, getNodeClasses; var init_util = __esm({ "src/rendering-util/rendering-elements/shapes/util.ts"() { "use strict"; init_createText(); init_diagramAPI(); init_src32(); init_defaultConfig(); init_common(); init_utils2(); 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 text3 = await createText(labelEl, sanitizeText(decodeEntities(label), getConfig2()), { useHtmlLabels, width: node2.width || getConfig2().flowchart?.wrappingWidth, // @ts-expect-error -- This is currently not used. Should this be `classes` instead? cssClasses: "markdown-node-label", style: node2.labelStyle, addSvgBackground: !!node2.icon || !!node2.img }); let bbox = text3.getBBox(); const halfPadding = (node2?.padding ?? 0) / 2; if (useHtmlLabels) { const div = text3.children[0]; const dv = select_default2(text3); const images = div.getElementsByTagName("img"); if (images) { const noImgText = label.replace(/]*>/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); }) ) ); } 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, options3) => { const useHtmlLabels = options3.useHtmlLabels || evaluate(getConfig2()?.flowchart?.htmlLabels); const labelEl = parent4.insert("g").attr("class", "label").attr("style", options3.labelStyle || ""); const text3 = await createText(labelEl, sanitizeText(decodeEntities(label), getConfig2()), { useHtmlLabels, width: options3.width || getConfig2()?.flowchart?.wrappingWidth, style: options3.labelStyle, addSvgBackground: !!options3.icon || !!options3.img }); let bbox = text3.getBBox(); const halfPadding = options3.padding / 2; if (evaluate(getConfig2()?.flowchart?.htmlLabels)) { const div = text3.children[0]; const dv = select_default2(text3); 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 (options3.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"); } }); // 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, q2) { var a1, a2, b1, b2, c1, c22; var r1, r2, r3, r4; var denom, offset, num; var x5, y5; 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 * q2.x + b1 * q2.y + c1; if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) { return; } a2 = q2.y - q1.y; b2 = q1.x - q2.x; c22 = q2.x * q1.y - q1.x * q2.y; r1 = a2 * p1.x + b2 * p1.y + c22; r2 = a2 * p22.x + b2 * p22.y + c22; if (r1 !== 0 && r2 !== 0 && sameSign(r1, r2)) { return; } denom = a1 * b2 - a2 * b1; if (denom === 0) { return; } offset = Math.abs(denom / 2); num = b1 * c22 - b2 * c1; x5 = num < 0 ? (num - offset) / denom : (num + offset) / denom; num = a2 * c1 - a1 * c22; y5 = num < 0 ? (num - offset) / denom : (num + offset) / denom; return { x: x5, y: y5 }; } 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, q2) { let pdx = p3.x - point8.x; let pdy = p3.y - point8.y; let distp = Math.sqrt(pdx * pdx + pdy * pdy); let qdx = q2.x - point8.x; let qdy = q2.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 y5 = node2.y; var dx = point8.x - x5; var dy = point8.y - y5; var w3 = node2.width / 2; var h2 = node2.height / 2; var sx, sy; if (Math.abs(dy) * w3 > Math.abs(dx) * h2) { if (dy < 0) { h2 = -h2; } sx = dy === 0 ? 0 : h2 * dx / dy; sy = h2; } else { if (dx < 0) { w3 = -w3; } sx = w3; sy = dx === 0 ? 0 : w3 * dy / dx; } return { x: x5 + sx, y: y5 + 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, styles2String, userNodeOverrides; 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 || []]); return { stylesMap, stylesArray: [...stylesMap] }; }, "compileStyles"); styles2Map = /* @__PURE__ */ __name((styles3) => { const styleMap2 = /* @__PURE__ */ new Map(); styles3.forEach((style3) => { const [key, value2] = style3.split(":"); styleMap2.set(key.trim(), value2?.trim()); }); return styleMap2; }, "styles2Map"); styles2String = /* @__PURE__ */ __name((node2) => { const { stylesArray } = compileStyles(node2); const labelStyles = []; const nodeStyles = []; const borderStyles = []; const backgroundStyles = []; stylesArray.forEach((style3) => { const key = style3[0]; if (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") { 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, options3) => { 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] }, options3 ); return result; }, "userNodeOverrides"); } }); // ../../node_modules/.pnpm/[email protected]_patch_hash=vxb6t6fqvzyhwhtjiliqr25jyq/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, h2 = Math.cos(a2), r2 = Math.sin(a2); for (const e4 of t4) { const [t5, s3] = e4; e4[0] = (t5 - n2) * h2 - (s3 - o2) * r2 + n2, e4[1] = (t5 - n2) * r2 + (s3 - o2) * h2 + o2; } } } function e(t4, e3) { return t4[0] === e3[0] && t4[1] === e3[1]; } function s(s2, n2, o2, a2 = 1) { const h2 = o2, r2 = Math.max(n2, 0.1), i2 = s2[0] && s2[0][0] && "number" == typeof s2[0][0] ? [s2] : s2, c3 = [0, 0]; if (h2) for (const e3 of i2) t(e3, c3, h2); const l2 = 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 h3 = []; 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]); h3.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 (h3.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)), !h3.length) return a3; let r3 = [], i3 = h3[0].ymin, c4 = 0; for (; r3.length || h3.length; ) { if (h3.length) { let t5 = -1; for (let e3 = 0; e3 < h3.length && !(h3[e3].ymin > i3); e3++) t5 = e3; h3.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 (h2) { for (const e3 of i2) t(e3, c3, -h2); !function(e3, s3, n3) { const o3 = []; e3.forEach((t4) => o3.push(...t4)), t(o3, s3, n3); }(l2, c3, -h2); } return l2; } 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 h2 = 1; return e3.roughness >= 1 && ((null === (n2 = e3.randomizer) || void 0 === n2 ? void 0 : n2.next()) || Math.random()) > 0.7 && (h2 = a2), s(t4, a2, o2, h2 || 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 b(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: d, 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 h2 = 0; const r2 = []; if ("BOD" === n2) { if ("M" !== a2.text && "m" !== a2.text) return b("M0,0" + t4); o2++, h2 = M[a2.text], n2 = a2.text; } else k(a2, d) ? h2 = M[n2] : (o2++, h2 = M[a2.text], n2 = a2.text); if (!(o2 + h2 < s2.length)) throw new Error("Path data ended short"); for (let t5 = o2; t5 < o2 + h2; t5++) { const e4 = s2[t5]; if (!k(e4, d)) throw new Error("Param not a number: " + n2 + "," + e4.text); r2[r2.length] = +e4.text; } if ("number" != typeof M[n2]) throw new Error("Bad segment: " + n2); { const t5 = { key: n2, data: r2 }; e3.push(t5), o2 += h2, a2 = s2[o2], "M" === n2 && (n2 = "L"), "m" === n2 && (n2 = "l"); } } return e3; } function y2(t4) { let e3 = 0, s2 = 0, n2 = 0, o2 = 0; const a2 = []; for (const { key: h2, data: r2 } of t4) switch (h2) { 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 m(t4) { const e3 = []; let s2 = "", n2 = 0, o2 = 0, a2 = 0, h2 = 0, r2 = 0, i2 = 0; for (const { key: c3, data: l2 } of t4) { switch (c3) { case "M": e3.push({ key: "M", data: [...l2] }), [n2, o2] = l2, [a2, h2] = l2; break; case "C": e3.push({ key: "C", data: [...l2] }), n2 = l2[4], o2 = l2[5], r2 = l2[2], i2 = l2[3]; break; case "L": e3.push({ key: "L", data: [...l2] }), [n2, o2] = l2; break; case "H": n2 = l2[0], e3.push({ key: "L", data: [n2, o2] }); break; case "V": o2 = l2[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, ...l2] }), r2 = l2[0], i2 = l2[1], n2 = l2[2], o2 = l2[3]; break; } case "T": { const [t5, a3] = l2; let h3 = 0, c4 = 0; "Q" === s2 || "T" === s2 ? (h3 = n2 + (n2 - r2), c4 = o2 + (o2 - i2)) : (h3 = n2, c4 = o2); const u2 = n2 + 2 * (h3 - n2) / 3, p3 = o2 + 2 * (c4 - o2) / 3, f3 = t5 + 2 * (h3 - t5) / 3, d2 = a3 + 2 * (c4 - a3) / 3; e3.push({ key: "C", data: [u2, p3, f3, d2, t5, a3] }), r2 = h3, i2 = c4, n2 = t5, o2 = a3; break; } case "Q": { const [t5, s3, a3, h3] = l2, c4 = n2 + 2 * (t5 - n2) / 3, u2 = o2 + 2 * (s3 - o2) / 3, p3 = a3 + 2 * (t5 - a3) / 3, f3 = h3 + 2 * (s3 - h3) / 3; e3.push({ key: "C", data: [c4, u2, p3, f3, a3, h3] }), r2 = t5, i2 = s3, n2 = a3, o2 = h3; break; } case "A": { const t5 = Math.abs(l2[0]), s3 = Math.abs(l2[1]), a3 = l2[2], h3 = l2[3], r3 = l2[4], i3 = l2[5], c4 = l2[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, h3, 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 = h2; } s2 = c3; } return e3; } function w(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, h2, r2, i2, c3) { const l2 = (u2 = h2, Math.PI * u2 / 180); var u2; let p3 = [], f3 = 0, d2 = 0, g2 = 0, M2 = 0; if (c3) [f3, d2, g2, M2] = c3; else { [t4, e3] = w(t4, e3, -l2), [s2, n2] = w(s2, n2, -l2); const h3 = (t4 - s2) / 2, c4 = (e3 - n2) / 2; let u3 = h3 * h3 / (o2 * o2) + c4 * c4 / (a2 * a2); u3 > 1 && (u3 = Math.sqrt(u3), o2 *= u3, a2 *= u3); const p4 = o2 * o2, k3 = a2 * a2, b3 = p4 * k3 - p4 * c4 * c4 - k3 * h3 * h3, y6 = p4 * c4 * c4 + k3 * h3 * h3, m3 = (r2 === i2 ? -1 : 1) * Math.sqrt(Math.abs(b3 / y6)); g2 = m3 * o2 * c4 / a2 + (t4 + s2) / 2, M2 = m3 * -a2 * h3 / o2 + (e3 + n2) / 2, f3 = Math.asin(parseFloat(((e3 - M2) / a2).toFixed(9))), d2 = Math.asin(parseFloat(((n2 - M2) / a2).toFixed(9))), t4 < g2 && (f3 = Math.PI - f3), s2 < g2 && (d2 = Math.PI - d2), f3 < 0 && (f3 = 2 * Math.PI + f3), d2 < 0 && (d2 = 2 * Math.PI + d2), i2 && f3 > d2 && (f3 -= 2 * Math.PI), !i2 && d2 > f3 && (d2 -= 2 * Math.PI); } let k2 = d2 - f3; if (Math.abs(k2) > 120 * Math.PI / 180) { const t5 = d2, e4 = s2, r3 = n2; d2 = i2 && d2 > f3 ? f3 + 120 * Math.PI / 180 * 1 : f3 + 120 * Math.PI / 180 * -1, p3 = x2(s2 = g2 + o2 * Math.cos(d2), n2 = M2 + a2 * Math.sin(d2), e4, r3, o2, a2, h2, 0, i2, [d2, t5, g2, M2]); } k2 = d2 - f3; const b2 = Math.cos(f3), y5 = Math.sin(f3), m2 = Math.cos(d2), P2 = Math.sin(d2), v3 = Math.tan(k2 / 4), S3 = 4 / 3 * o2 * v3, O2 = 4 / 3 * a2 * v3, L2 = [t4, e3], T3 = [t4 + S3 * y5, e3 - O2 * b2], D3 = [s2 + S3 * P2, n2 - O2 * m2], A2 = [s2, n2]; if (T3[0] = 2 * L2[0] - T3[0], T3[1] = 2 * L2[1] - T3[1], c3) return [T3, D3, A2].concat(p3); { p3 = [T3, D3, A2].concat(p3); const t5 = []; for (let e4 = 0; e4 < p3.length; e4 += 3) { const s3 = w(p3[e4][0], p3[e4][1], l2), n3 = w(p3[e4 + 1][0], p3[e4 + 1][1], l2), o3 = w(p3[e4 + 2][0], p3[e4 + 2][1], l2); t5.push([s3[0], s3[1], n3[0], n3[1], o3[0], o3[1]]); } return t5; } } function v(t4, e3, s2, n2, o2) { return { type: "path", ops: $(t4, e3, s2, n2, o2) }; } function S2(t4, e3, s2) { const n2 = (t4 || []).length; if (n2 > 2) { const o2 = []; for (let e4 = 0; e4 < n2 - 1; e4++) o2.push(...$(t4[e4][0], t4[e4][1], t4[e4 + 1][0], t4[e4 + 1][1], s2)); return e3 && o2.push(...$(t4[n2 - 1][0], t4[n2 - 1][1], t4[0][0], t4[0][1], s2)), { type: "path", ops: o2 }; } return 2 === n2 ? v(t4[0][0], t4[0][1], t4[1][0], t4[1][1], s2) : { type: "path", ops: [] }; } function O(t4, e3, s2, n2, o2) { return function(t5, e4) { return S2(t5, true, e4); }([[t4, e3], [t4 + s2, e3], [t4 + s2, e3 + n2], [t4, e3 + n2]], o2); } function L(t4, e3) { if (t4.length) { const s2 = "number" == typeof t4[0][0] ? [t4] : t4, n2 = j(s2[0], 1 * (1 + 0.2 * e3.roughness), e3), o2 = e3.disableMultiStroke ? [] : j(s2[0], 1.5 * (1 + 0.22 * e3.roughness), z(e3)); for (let t5 = 1; t5 < s2.length; t5++) { const a2 = s2[t5]; if (a2.length) { const t6 = j(a2, 1 * (1 + 0.2 * e3.roughness), e3), s3 = e3.disableMultiStroke ? [] : j(a2, 1.5 * (1 + 0.22 * e3.roughness), z(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 h2 = Math.abs(t4 / 2), r2 = Math.abs(e3 / 2); const i2 = 1 - s2.curveFitting; return h2 += G(h2 * i2, s2), r2 += G(r2 * i2, s2), { increment: a2, rx: h2, ry: r2 }; } function D2(t4, e3, s2, n2) { const [o2, a2] = F(n2.increment, t4, e3, n2.rx, n2.ry, 1, n2.increment * E(0.1, E(0.4, 1, s2), s2), s2); let h2 = q(o2, null, s2); if (!s2.disableMultiStroke && 0 !== s2.roughness) { const [o3] = F(n2.increment, t4, e3, n2.rx, n2.ry, 1.5, 0, s2), a3 = q(o3, null, s2); h2 = h2.concat(a3); } return { estimatedPoints: a2, opset: { type: "path", ops: h2 } }; } function A(t4, e3, s2, n2, o2, a2, h2, r2, i2) { const c3 = t4, l2 = e3; let u2 = Math.abs(s2 / 2), p3 = Math.abs(n2 / 2); u2 += G(0.01 * u2, i2), p3 += G(0.01 * p3, i2); let f3 = o2, d2 = a2; for (; f3 < 0; ) f3 += 2 * Math.PI, d2 += 2 * Math.PI; d2 - f3 > 2 * Math.PI && (f3 = 0, d2 = 2 * Math.PI); const g2 = 2 * Math.PI / i2.curveStepCount, M2 = Math.min(g2 / 2, (d2 - f3) / 2), k2 = V(M2, c3, l2, u2, p3, f3, d2, 1, i2); if (!i2.disableMultiStroke) { const t5 = V(M2, c3, l2, u2, p3, f3, d2, 1.5, i2); k2.push(...t5); } return h2 && (r2 ? k2.push(...$(c3, l2, c3 + u2 * Math.cos(f3), l2 + p3 * Math.sin(f3), i2), ...$(c3, l2, c3 + u2 * Math.cos(d2), l2 + p3 * Math.sin(d2), i2)) : k2.push({ op: "lineTo", data: [c3, l2] }, { op: "lineTo", data: [c3 + u2 * Math.cos(f3), l2 + p3 * Math.sin(f3)] })), { type: "path", ops: k2 }; } function _(t4, e3) { const s2 = m(y2(b(t4))), n2 = []; let o2 = [0, 0], a2 = [0, 0]; for (const { key: t5, data: h2 } of s2) switch (t5) { case "M": a2 = [h2[0], h2[1]], o2 = [h2[0], h2[1]]; break; case "L": n2.push(...$(a2[0], a2[1], h2[0], h2[1], e3)), a2 = [h2[0], h2[1]]; break; case "C": { const [t6, s3, o3, r2, i2, c3] = h2; n2.push(...Z(t6, s3, o3, r2, i2, c3, a2, e3)), a2 = [i2, c3]; break; } case "Z": n2.push(...$(a2[0], a2[1], o2[0], o2[1], e3)), a2 = [o2[0], o2[1]]; } return { type: "path", ops: n2 }; } function I(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] + G(t5, e3), n2[0][1] + G(t5, e3)] }); for (let a2 = 1; a2 < o2; a2++) s2.push({ op: "lineTo", data: [n2[a2][0] + G(t5, e3), n2[a2][1] + G(t5, e3)] }); } } return { type: "fillPath", ops: s2 }; } function C(t4, e3) { return function(t5, e4) { let s2 = t5.fillStyle || "hachure"; if (!u[s2]) switch (s2) { case "zigzag": u[s2] || (u[s2] = new h(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 l(e4)); break; default: s2 = "hachure", u[s2] || (u[s2] = new o(e4)); } return u[s2]; }(e3, P).fillPolygons(t4, e3); } function z(t4) { const e3 = Object.assign({}, t4); return e3.randomizer = void 0, t4.seed && (e3.seed = t4.seed + 1), e3; } function W(t4) { return t4.randomizer || (t4.randomizer = new p(t4.seed || 0)), t4.randomizer.next(); } function E(t4, e3, s2, n2 = 1) { return s2.roughness * n2 * (W(s2) * (e3 - t4) + t4); } function G(t4, e3, s2 = 1) { return E(-t4, t4, e3, s2); } function $(t4, e3, s2, n2, o2, a2 = false) { const h2 = a2 ? o2.disableMultiStrokeFill : o2.disableMultiStroke, r2 = R(t4, e3, s2, n2, o2, true, false); if (h2) return r2; const i2 = R(t4, e3, s2, n2, o2, true, true); return r2.concat(i2); } function R(t4, e3, s2, n2, o2, a2, h2) { 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 l2 = o2.maxRandomnessOffset || 0; l2 * l2 * 100 > r2 && (l2 = i2 / 10); const u2 = l2 / 2, p3 = 0.2 + 0.2 * W(o2); let f3 = o2.bowing * o2.maxRandomnessOffset * (n2 - e3) / 200, d2 = o2.bowing * o2.maxRandomnessOffset * (t4 - s2) / 200; f3 = G(f3, o2, c3), d2 = G(d2, o2, c3); const g2 = [], M2 = /* @__PURE__ */ __name(() => G(u2, o2, c3), "M"), k2 = /* @__PURE__ */ __name(() => G(l2, o2, c3), "k"), b2 = o2.preserveVertices; return a2 && (h2 ? g2.push({ op: "move", data: [t4 + (b2 ? 0 : M2()), e3 + (b2 ? 0 : M2())] }) : g2.push({ op: "move", data: [t4 + (b2 ? 0 : G(l2, o2, c3)), e3 + (b2 ? 0 : G(l2, o2, c3))] })), h2 ? g2.push({ op: "bcurveTo", data: [f3 + t4 + (s2 - t4) * p3 + M2(), d2 + e3 + (n2 - e3) * p3 + M2(), f3 + t4 + 2 * (s2 - t4) * p3 + M2(), d2 + e3 + 2 * (n2 - e3) * p3 + M2(), s2 + (b2 ? 0 : M2()), n2 + (b2 ? 0 : M2())] }) : g2.push({ op: "bcurveTo", data: [f3 + t4 + (s2 - t4) * p3 + k2(), d2 + e3 + (n2 - e3) * p3 + k2(), f3 + t4 + 2 * (s2 - t4) * p3 + k2(), d2 + e3 + 2 * (n2 - e3) * p3 + k2(), s2 + (b2 ? 0 : k2()), n2 + (b2 ? 0 : k2())] }), g2; } function j(t4, e3, s2) { if (!t4.length) return []; const n2 = []; n2.push([t4[0][0] + G(e3, s2), t4[0][1] + G(e3, s2)]), n2.push([t4[0][0] + G(e3, s2), t4[0][1] + G(e3, s2)]); for (let o2 = 1; o2 < t4.length; o2++) n2.push([t4[o2][0] + G(e3, s2), t4[o2][1] + G(e3, s2)]), o2 === t4.length - 1 && n2.push([t4[o2][0] + G(e3, s2), t4[o2][1] + G(e3, s2)]); return q(n2, null, s2); } function q(t4, e3, s2) { const n2 = t4.length, o2 = []; if (n2 > 3) { const a2 = [], h2 = 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] + (h2 * t4[e4 + 1][0] - h2 * t4[e4 - 1][0]) / 6, s3[1] + (h2 * t4[e4 + 1][1] - h2 * t4[e4 - 1][1]) / 6], a2[2] = [t4[e4 + 1][0] + (h2 * t4[e4][0] - h2 * t4[e4 + 2][0]) / 6, t4[e4 + 1][1] + (h2 * t4[e4][1] - h2 * 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] + G(t5, s2), e3[1] + G(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(...R(t4[0][0], t4[0][1], t4[1][0], t4[1][1], s2, true, true)); return o2; } function F(t4, e3, s2, n2, o2, a2, h2, 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 l2 = G(0.5, r2) - Math.PI / 2; c3.push([G(a2, r2) + e3 + 0.9 * n2 * Math.cos(l2 - t4), G(a2, r2) + s2 + 0.9 * o2 * Math.sin(l2 - t4)]); const u2 = 2 * Math.PI + l2 - 0.01; for (let h3 = l2; h3 < u2; h3 += t4) { const t5 = [G(a2, r2) + e3 + n2 * Math.cos(h3), G(a2, r2) + s2 + o2 * Math.sin(h3)]; i2.push(t5), c3.push(t5); } c3.push([G(a2, r2) + e3 + n2 * Math.cos(l2 + 2 * Math.PI + 0.5 * h2), G(a2, r2) + s2 + o2 * Math.sin(l2 + 2 * Math.PI + 0.5 * h2)]), c3.push([G(a2, r2) + e3 + 0.98 * n2 * Math.cos(l2 + h2), G(a2, r2) + s2 + 0.98 * o2 * Math.sin(l2 + h2)]), c3.push([G(a2, r2) + e3 + 0.9 * n2 * Math.cos(l2 + 0.5 * h2), G(a2, r2) + s2 + 0.9 * o2 * Math.sin(l2 + 0.5 * h2)]); } return [c3, i2]; } function V(t4, e3, s2, n2, o2, a2, h2, r2, i2) { const c3 = a2 + G(0.1, i2), l2 = []; l2.push([G(r2, i2) + e3 + 0.9 * n2 * Math.cos(c3 - t4), G(r2, i2) + s2 + 0.9 * o2 * Math.sin(c3 - t4)]); for (let a3 = c3; a3 <= h2; a3 += t4) l2.push([G(r2, i2) + e3 + n2 * Math.cos(a3), G(r2, i2) + s2 + o2 * Math.sin(a3)]); return l2.push([e3 + n2 * Math.cos(h2), s2 + o2 * Math.sin(h2)]), l2.push([e3 + n2 * Math.cos(h2), s2 + o2 * Math.sin(h2)]), q(l2, null, i2); } function Z(t4, e3, s2, n2, o2, a2, h2, r2) { const i2 = [], c3 = [r2.maxRandomnessOffset || 1, (r2.maxRandomnessOffset || 1) + 0.3]; let l2 = [0, 0]; const u2 = r2.disableMultiStroke ? 1 : 2, p3 = r2.preserveVertices; for (let f3 = 0; f3 < u2; f3++) 0 === f3 ? i2.push({ op: "move", data: [h2[0], h2[1]] }) : i2.push({ op: "move", data: [h2[0] + (p3 ? 0 : G(c3[0], r2)), h2[1] + (p3 ? 0 : G(c3[0], r2))] }), l2 = p3 ? [o2, a2] : [o2 + G(c3[f3], r2), a2 + G(c3[f3], r2)], i2.push({ op: "bcurveTo", data: [t4 + G(c3[f3], r2), e3 + G(c3[f3], r2), s2 + G(c3[f3], r2), n2 + G(c3[f3], r2), l2[0], l2[1]] }); return i2; } function Q(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(Q(t4[0]), Q(t4[1]), Q(t4[2]), Q(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(Q(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 N(t4, e3) { return Math.pow(t4[0] - e3[0], 2) + Math.pow(t4[1] - e3[1], 2); } function B(t4, e3, s2) { const n2 = N(e3, s2); if (0 === n2) return N(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)), N(t4, J(e3, s2, o2)); } function J(t4, e3, s2) { return [t4[0] + (e3[0] - t4[0]) * s2, t4[1] + (e3[1] - t4[1]) * s2]; } function K2(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 h3 = 3 * n3[0] - 2 * s3[0] - a3[0]; h3 *= h3; 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, h3 < i2 && (h3 = i2), r2 < c3 && (r2 = c3), h3 + r2; }(t4, e3) < s2) { const s3 = t4[e3 + 0]; if (o2.length) { (a2 = o2[o2.length - 1], h2 = s3, Math.sqrt(N(a2, h2))) > 1 && o2.push(s3); } else o2.push(s3); o2.push(t4[e3 + 3]); } else { const n3 = 0.5, a3 = t4[e3 + 0], h3 = t4[e3 + 1], r2 = t4[e3 + 2], i2 = t4[e3 + 3], c3 = J(a3, h3, n3), l2 = J(h3, r2, n3), u2 = J(r2, i2, n3), p3 = J(c3, l2, n3), f3 = J(l2, u2, n3), d2 = J(p3, f3, n3); K2([a3, c3, p3, d2], 0, s2, o2), K2([d2, f3, u2, i2], 0, s2, o2); } var a2, h2; return o2; } function U(t4, e3) { return X2(t4, 0, t4.length, e3); } function X2(t4, e3, s2, n2, o2) { const a2 = o2 || [], h2 = t4[e3], r2 = t4[s2 - 1]; let i2 = 0, c3 = 1; for (let n3 = e3 + 1; n3 < s2 - 1; ++n3) { const e4 = B(t4[n3], h2, r2); e4 > i2 && (i2 = e4, c3 = n3); } return Math.sqrt(i2) > n2 ? (X2(t4, e3, c3 + 1, n2, a2), X2(t4, c3, s2, n2, a2)) : (a2.length || a2.push(h2), 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++) { K2(t4, 3 * s3, e3, n2); } return s2 && s2 > 0 ? X2(n2, 0, n2.length, s2) : n2; } var o, h, r, i, c2, l, u, p, f, d, g, M, P, tt, et, st, nt, ot, at; var init_rough_esm = __esm({ "../../node_modules/.pnpm/[email protected]_patch_hash=vxb6t6fqvzyhwhtjiliqr25jyq/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"); h = 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 })), h2 = Math.PI / 180 * e3.hachureAngle, r2 = [], i2 = 0.5 * s2 * Math.cos(h2), c3 = 0.5 * s2 * Math.sin(h2); 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 h2 = n2 / 4; for (const r2 of t4) { const t5 = a(r2), i2 = t5 / n2, c3 = Math.ceil(i2) - 1, l2 = 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 + l2 + t6 * n2, r3 = u2 - h2 + 2 * Math.random() * h2, i3 = a2 - h2 + 2 * Math.random() * h2, 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 h2 = a(t5), r2 = Math.floor(h2 / (s2 + n2)), i2 = (h2 + n2 - r2 * (s2 + n2)) / 2; let c3 = t5[0], l2 = t5[1]; c3[0] > l2[0] && (c3 = t5[1], l2 = t5[0]); const u2 = Math.atan((l2[1] - c3[1]) / (l2[0] - c3[0])); for (let t6 = 0; t6 < r2; t6++) { const a2 = t6 * (s2 + n2), h3 = a2 + s2, r3 = [c3[0] + a2 * Math.cos(u2) + i2 * Math.cos(u2), c3[1] + a2 * Math.sin(u2) + i2 * Math.sin(u2)], l3 = [c3[0] + h3 * Math.cos(u2) + i2 * Math.cos(u2), c3[1] + h3 * Math.sin(u2) + i2 * Math.sin(u2)]; o2.push(...this.helper.doubleLineOps(r3[0], r3[1], l3[0], l3[1], e3)); } }), o2; } }; l = 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), h2 = 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 < h2; t6++) { const o3 = 2 * t6 * e3, a2 = 2 * (t6 + 1) * e3, h3 = Math.sqrt(2 * Math.pow(e3, 2)), i3 = [r2[0] + o3 * Math.cos(c3), r2[1] + o3 * Math.sin(c3)], l2 = [r2[0] + a2 * Math.cos(c3), r2[1] + a2 * Math.sin(c3)], u2 = [i3[0] + h3 * Math.cos(c3 + Math.PI / 4), i3[1] + h3 * 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], l2[0], l2[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; d = 1; g = 2; M = { 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(b, "b"); __name(y2, "y"); __name(m, "m"); __name(w, "w"); __name(x2, "x"); P = { randOffset: /* @__PURE__ */ __name(function(t4, e3) { return G(t4, e3); }, "randOffset"), randOffsetWithRange: /* @__PURE__ */ __name(function(t4, e3, s2) { return E(t4, e3, s2); }, "randOffsetWithRange"), ellipse: /* @__PURE__ */ __name(function(t4, e3, s2, n2, o2) { const a2 = T2(s2, n2, o2); return D2(t4, e3, o2, a2).opset; }, "ellipse"), doubleLineOps: /* @__PURE__ */ __name(function(t4, e3, s2, n2, o2) { return $(t4, e3, s2, n2, o2, true); }, "doubleLineOps") }; __name(v, "v"); __name(S2, "S"); __name(O, "O"); __name(L, "L"); __name(T2, "T"); __name(D2, "D"); __name(A, "A"); __name(_, "_"); __name(I, "I"); __name(C, "C"); __name(z, "z"); __name(W, "W"); __name(E, "E"); __name(G, "G"); __name($, "$"); __name(R, "R"); __name(j, "j"); __name(q, "q"); __name(F, "F"); __name(V, "V"); __name(Z, "Z"); __name(Q, "Q"); __name(H, "H"); __name(N, "N"); __name(B, "B"); __name(J, "J"); __name(K2, "K"); __name(U, "U"); __name(X2, "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", [v(t4, e3, s2, n2, a2)], a2); } rectangle(t4, e3, s2, n2, o2) { const a2 = this._o(o2), h2 = [], r2 = O(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 ? h2.push(I([o3], a2)) : h2.push(C([o3], a2)); } return a2.stroke !== tt && h2.push(r2), this._d("rectangle", h2, a2); } ellipse(t4, e3, s2, n2, o2) { const a2 = this._o(o2), h2 = [], r2 = T2(s2, n2, a2), i2 = D2(t4, e3, a2, r2); if (a2.fill) if ("solid" === a2.fillStyle) { const s3 = D2(t4, e3, a2, r2).opset; s3.type = "fillPath", h2.push(s3); } else h2.push(C([i2.estimatedPoints], a2)); return a2.stroke !== tt && h2.push(i2.opset), this._d("ellipse", h2, 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", [S2(t4, false, s2)], s2); } arc(t4, e3, s2, n2, o2, a2, h2 = false, r2) { const i2 = this._o(r2), c3 = [], l2 = A(t4, e3, s2, n2, o2, a2, h2, true, i2); if (h2 && i2.fill) if ("solid" === i2.fillStyle) { const h3 = Object.assign({}, i2); h3.disableMultiStroke = true; const r3 = A(t4, e3, s2, n2, o2, a2, true, false, h3); r3.type = "fillPath", c3.push(r3); } else c3.push(function(t5, e4, s3, n3, o3, a3, h3) { const r3 = t5, i3 = e4; let c4 = Math.abs(s3 / 2), l3 = Math.abs(n3 / 2); c4 += G(0.01 * c4, h3), l3 += G(0.01 * l3, h3); 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 f3 = (p3 - u2) / h3.curveStepCount, d2 = []; for (let t6 = u2; t6 <= p3; t6 += f3) d2.push([r3 + c4 * Math.cos(t6), i3 + l3 * Math.sin(t6)]); return d2.push([r3 + c4 * Math.cos(p3), i3 + l3 * Math.sin(p3)]), d2.push([r3, i3]), C([d2], h3); }(t4, e3, s2, n2, o2, a2, i2)); return i2.stroke !== tt && c3.push(l2), this._d("arc", c3, i2); } curve(t4, e3) { const s2 = this._o(e3), n2 = [], o2 = L(t4, s2); if (s2.fill && s2.fill !== tt) if ("solid" === s2.fillStyle) { const e4 = L(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(C([e4], s2)); } return s2.stroke !== tt && n2.push(o2), this._d("curve", n2, s2); } polygon(t4, e3) { const s2 = this._o(e3), n2 = [], o2 = S2(t4, true, s2); return s2.fill && ("solid" === s2.fillStyle ? n2.push(I([t4], s2)) : n2.push(C([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, h2 = !!(s2.simplification && s2.simplification < 1), r2 = function(t5, e4, s3) { const n3 = m(y2(b(t5))), o3 = []; let a3 = [], h3 = [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(), h3 = [e6[0], e6[1]], a3.push(h3); break; case "L": i3(), a3.push([e6[0], e6[1]]); break; case "C": if (!r3.length) { const t7 = a3.length ? a3[a3.length - 1] : h3; 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([h3[0], h3[1]]); } if (c3(), !s3) return o3; const l2 = []; for (const t6 of o3) { const e6 = U(t6, s3); e6.length && l2.push(e6); } return l2; }(t4, 1, h2 ? 4 - 4 * (s2.simplification || 1) : (1 + s2.roughness) / 2), i2 = _(t4, s2); if (o2) if ("solid" === s2.fillStyle) if (1 === r2.length) { const e4 = _(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(I(r2, s2)); else n2.push(C(r2, s2)); return a2 && (h2 ? r2.forEach((t5) => { n2.push(S2(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, h2 = false, r2) { const i2 = this.gen.arc(t4, e3, s2, n2, o2, a2, h2, 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 h2 of e3) { let e4 = null; switch (h2.type) { case "path": e4 = n2.createElementNS(nt, "path"), e4.setAttribute("d", this.opsToPath(h2, 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(h2, 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, h2, 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, h2 = false, r2) { const i2 = this.gen.arc(t4, e3, s2, n2, o2, a2, h2, 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 classes6 = getNodeClasses(node2); let cssClasses = classes6; if (!classes6) { 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 options3 = userNodeOverrides(node2, { fill: "black", stroke: "none", fillStyle: "solid" }); if (node2.look !== "handDrawn") { options3.roughness = 0; } const roughNode = rc.circle(0, 0, radius2 * 2, options3); 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 distance2 = Math.sqrt(transformedX ** 2 + transformedY ** 2); if (distance2 > 1) { throw new Error("The given radii are too small to create an arc between the points."); } const scaledCenterDistance = Math.sqrt(1 - distance2 ** 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 y5 = centerY + ry * Math.sin(angle3); points.push({ x: x5, y: y5 }); } return points; } async function bowTieRect(parent4, node2) { const { labelStyles, nodeStyles } = styles2String(node2); node2.labelStyle = labelStyles; const { shapeSvg, bbox } = await labelHelper(parent4, node2, getNodeClasses(node2)); const w3 = bbox.width + node2.padding + 20; const h2 = bbox.height + node2.padding; const ry = h2 / 2; const rx = ry / (2.5 + h2 / 50); const { cssStyles } = node2; const points = [ { x: w3 / 2, y: -h2 / 2 }, { x: -w3 / 2, y: -h2 / 2 }, ...generateArcPoints(-w3 / 2, -h2 / 2, -w3 / 2, h2 / 2, rx, ry, false), { x: w3 / 2, y: h2 / 2 }, ...generateArcPoints(w3 / 2, h2 / 2, w3 / 2, -h2 / 2, rx, ry, true) ]; const rc = at.svg(shapeSvg); const options3 = userNodeOverrides(node2, {}); if (node2.look !== "handDrawn") { options3.roughness = 0; options3.fillStyle = "solid"; } const bowTieRectPath = createPathFromPoints(points); const bowTieRectShapePath = rc.path(bowTieRectPath, options3); const bowTieRectShape = shapeSvg.insert(() => bowTieRectShapePath, ":first-child"); bowTieRectShape.attr("class", "basic label-container"); 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(bowTieRect, "bowTieRect"); } }); // src/rendering-util/rendering-elements/shapes/insertPolygonShape.ts function insertPolygonShape(parent4, w3, h2, points) { return parent4.insert("polygon", ":first-child").attr( "points", points.map(function(d2) { return d2.x + "," + d2.y; }).join(" ") ).attr("class", "label-container").attr("transform", "translate(" + -w3 / 2 + "," + h2 / 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 { shapeSvg, bbox } = await labelHelper(parent4, node2, getNodeClasses(node2)); const h2 = bbox.height + node2.padding; const padding2 = 12; const w3 = bbox.width + node2.padding + padding2; const left3 = 0; const right3 = w3; const top2 = -h2; const bottom2 = 0; const points = [ { x: left3 + padding2, y: top2 }, { x: right3, y: top2 }, { x: right3, y: bottom2 }, { x: left3, y: bottom2 }, { x: left3, y: top2 + padding2 }, { x: left3 + padding2, y: top2 } ]; let polygon2; const { cssStyles } = node2; if (node2.look === "handDrawn") { const rc = at.svg(shapeSvg); const options3 = userNodeOverrides(node2, {}); const pathData = createPathFromPoints(points); const roughNode = rc.path(pathData, options3); polygon2 = shapeSvg.insert(() => roughNode, ":first-child").attr("transform", `translate(${-w3 / 2}, ${h2 / 2})`); if (cssStyles) { polygon2.attr("style", cssStyles); } } else { polygon2 = insertPolygonShape(shapeSvg, w3, h2, points); } if (nodeStyles) { polygon2.attr("style", nodeStyles); } updateNodeBounds(node2, polygon2); node2.intersect = function(point8) { return intersect_default.polygon(node2, points, point8); }; return shapeSvg; } 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(); __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 options3 = userNodeOverrides(node2, {}); if (node2.look !== "handDrawn") { options3.roughness = 0; options3.fillStyle = "solid"; } const choicePath = createPathFromPoints(points); const roughNode = rc.path(choicePath, options3); 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) { const { labelStyles, nodeStyles } = styles2String(node2); node2.labelStyle = labelStyles; const { shapeSvg, bbox, halfPadding } = await labelHelper(parent4, node2, getNodeClasses(node2)); const radius2 = bbox.width / 2 + halfPadding; 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.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_logger(); init_util(); init_intersect(); init_handDrawnShapeStyles(); init_rough_esm(); init_utils2(); __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 options3 = userNodeOverrides(node2, {}); if (node2.look !== "handDrawn") { options3.roughness = 0; options3.fillStyle = "solid"; } const circleNode = rc.circle(0, 0, radius2 * 2, options3); const linePath = createLine(radius2); const lineNode = rc.path(linePath, options3); const crossedCircle2 = shapeSvg.insert(() => circleNode, ":first-child"); crossedCircle2.insert(() => lineNode); 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 y5 = centerY + radius2 * Math.sin(angle2); points.push({ x: -x5, y: -y5 }); } 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 w3 = bbox.width + (node2.padding ?? 0); const h2 = bbox.height + (node2.padding ?? 0); const radius2 = Math.max(5, h2 * 0.1); const { cssStyles } = node2; const points = [ ...generateCirclePoints2(w3 / 2, -h2 / 2, radius2, 30, -90, 0), { x: -w3 / 2 - radius2, y: radius2 }, ...generateCirclePoints2(w3 / 2 + radius2 * 2, -radius2, radius2, 20, -180, -270), ...generateCirclePoints2(w3 / 2 + radius2 * 2, radius2, radius2, 20, -90, -180), { x: -w3 / 2 - radius2, y: -h2 / 2 }, ...generateCirclePoints2(w3 / 2, h2 / 2, radius2, 20, 0, 90) ]; const rectPoints = [ { x: w3 / 2, y: -h2 / 2 - radius2 }, { x: -w3 / 2, y: -h2 / 2 - radius2 }, ...generateCirclePoints2(w3 / 2, -h2 / 2, radius2, 20, -90, 0), { x: -w3 / 2 - radius2, y: -radius2 }, ...generateCirclePoints2(w3 / 2 + w3 * 0.1, -radius2, radius2, 20, -180, -270), ...generateCirclePoints2(w3 / 2 + w3 * 0.1, radius2, radius2, 20, -90, -180), { x: -w3 / 2 - radius2, y: h2 / 2 }, ...generateCirclePoints2(w3 / 2, h2 / 2, radius2, 20, 0, 90), { x: -w3 / 2, y: h2 / 2 + radius2 }, { x: w3 / 2, y: h2 / 2 + radius2 } ]; const rc = at.svg(shapeSvg); const options3 = userNodeOverrides(node2, { fill: "none" }); if (node2.look !== "handDrawn") { options3.roughness = 0; options3.fillStyle = "solid"; } const curlyBraceLeftPath = createPathFromPoints(points); const newCurlyBracePath = curlyBraceLeftPath.replace("Z", ""); const curlyBraceLeftNode = rc.path(newCurlyBracePath, options3); const rectPath = createPathFromPoints(rectPoints); const rectShape = rc.path(rectPath, { ...options3 }); 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(${-w3 / 2 + radius2 - (bbox.x - (bbox.left ?? 0))},${-h2 / 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 y5 = centerY + radius2 * Math.sin(angle2); points.push({ x: x5, y: y5 }); } 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 w3 = bbox.width + (node2.padding ?? 0); const h2 = bbox.height + (node2.padding ?? 0); const radius2 = Math.max(5, h2 * 0.1); const { cssStyles } = node2; const points = [ ...generateCirclePoints3(w3 / 2, -h2 / 2, radius2, 20, -90, 0), { x: w3 / 2 + radius2, y: -radius2 }, ...generateCirclePoints3(w3 / 2 + radius2 * 2, -radius2, radius2, 20, -180, -270), ...generateCirclePoints3(w3 / 2 + radius2 * 2, radius2, radius2, 20, -90, -180), { x: w3 / 2 + radius2, y: h2 / 2 }, ...generateCirclePoints3(w3 / 2, h2 / 2, radius2, 20, 0, 90) ]; const rectPoints = [ { x: -w3 / 2, y: -h2 / 2 - radius2 }, { x: w3 / 2, y: -h2 / 2 - radius2 }, ...generateCirclePoints3(w3 / 2, -h2 / 2, radius2, 20, -90, 0), { x: w3 / 2 + radius2, y: -radius2 }, ...generateCirclePoints3(w3 / 2 + radius2 * 2, -radius2, radius2, 20, -180, -270), ...generateCirclePoints3(w3 / 2 + radius2 * 2, radius2, radius2, 20, -90, -180), { x: w3 / 2 + radius2, y: h2 / 2 }, ...generateCirclePoints3(w3 / 2, h2 / 2, radius2, 20, 0, 90), { x: w3 / 2, y: h2 / 2 + radius2 }, { x: -w3 / 2, y: h2 / 2 + radius2 } ]; const rc = at.svg(shapeSvg); const options3 = userNodeOverrides(node2, { fill: "none" }); if (node2.look !== "handDrawn") { options3.roughness = 0; options3.fillStyle = "solid"; } const curlyBraceRightPath = createPathFromPoints(points); const newCurlyBracePath = curlyBraceRightPath.replace("Z", ""); const curlyBraceRightNode = rc.path(newCurlyBracePath, options3); const rectPath = createPathFromPoints(rectPoints); const rectShape = rc.path(rectPath, { ...options3 }); 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(${-w3 / 2 + (node2.padding ?? 0) / 2 - (bbox.x - (bbox.left ?? 0))},${-h2 / 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 y5 = centerY + radius2 * Math.sin(angle2); points.push({ x: -x5, y: -y5 }); } 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 w3 = bbox.width + (node2.padding ?? 0); const h2 = bbox.height + (node2.padding ?? 0); const radius2 = Math.max(5, h2 * 0.1); const { cssStyles } = node2; const leftCurlyBracePoints = [ ...generateCirclePoints4(w3 / 2, -h2 / 2, radius2, 30, -90, 0), { x: -w3 / 2 - radius2, y: radius2 }, ...generateCirclePoints4(w3 / 2 + radius2 * 2, -radius2, radius2, 20, -180, -270), ...generateCirclePoints4(w3 / 2 + radius2 * 2, radius2, radius2, 20, -90, -180), { x: -w3 / 2 - radius2, y: -h2 / 2 }, ...generateCirclePoints4(w3 / 2, h2 / 2, radius2, 20, 0, 90) ]; const rightCurlyBracePoints = [ ...generateCirclePoints4(-w3 / 2 + radius2 + radius2 / 2, -h2 / 2, radius2, 20, -90, -180), { x: w3 / 2 - radius2 / 2, y: radius2 }, ...generateCirclePoints4(-w3 / 2 - radius2 / 2, -radius2, radius2, 20, 0, 90), ...generateCirclePoints4(-w3 / 2 - radius2 / 2, radius2, radius2, 20, -90, 0), { x: w3 / 2 - radius2 / 2, y: -radius2 }, ...generateCirclePoints4(-w3 / 2 + radius2 + radius2 / 2, h2 / 2, radius2, 30, -180, -270) ]; const rectPoints = [ { x: w3 / 2, y: -h2 / 2 - radius2 }, { x: -w3 / 2, y: -h2 / 2 - radius2 }, ...generateCirclePoints4(w3 / 2, -h2 / 2, radius2, 20, -90, 0), { x: -w3 / 2 - radius2, y: -radius2 }, ...generateCirclePoints4(w3 / 2 + radius2 * 2, -radius2, radius2, 20, -180, -270), ...generateCirclePoints4(w3 / 2 + radius2 * 2, radius2, radius2, 20, -90, -180), { x: -w3 / 2 - radius2, y: h2 / 2 }, ...generateCirclePoints4(w3 / 2, h2 / 2, radius2, 20, 0, 90), { x: -w3 / 2, y: h2 / 2 + radius2 }, { x: w3 / 2 - radius2 - radius2 / 2, y: h2 / 2 + radius2 }, ...generateCirclePoints4(-w3 / 2 + radius2 + radius2 / 2, -h2 / 2, radius2, 20, -90, -180), { x: w3 / 2 - radius2 / 2, y: radius2 }, ...generateCirclePoints4(-w3 / 2 - radius2 / 2, -radius2, radius2, 20, 0, 90), ...generateCirclePoints4(-w3 / 2 - radius2 / 2, radius2, radius2, 20, -90, 0), { x: w3 / 2 - radius2 / 2, y: -radius2 }, ...generateCirclePoints4(-w3 / 2 + radius2 + radius2 / 2, h2 / 2, radius2, 30, -180, -270) ]; const rc = at.svg(shapeSvg); const options3 = userNodeOverrides(node2, { fill: "none" }); if (node2.look !== "handDrawn") { options3.roughness = 0; options3.fillStyle = "solid"; } const leftCurlyBracePath = createPathFromPoints(leftCurlyBracePoints); const newLeftCurlyBracePath = leftCurlyBracePath.replace("Z", ""); const leftCurlyBraceNode = rc.path(newLeftCurlyBracePath, options3); const rightCurlyBracePath = createPathFromPoints(rightCurlyBracePoints); const newRightCurlyBracePath = rightCurlyBracePath.replace("Z", ""); const rightCurlyBraceNode = rc.path(newRightCurlyBracePath, options3); const rectPath = createPathFromPoints(rectPoints); const rectShape = rc.path(rectPath, { ...options3 }); 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(${-w3 / 2 + (node2.padding ?? 0) / 2 - (bbox.x - (bbox.left ?? 0))},${-h2 / 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 { shapeSvg, bbox } = await labelHelper(parent4, node2, getNodeClasses(node2)); const minWidth = 80, minHeight = 20; const w3 = Math.max(minWidth, (bbox.width + (node2.padding ?? 0) * 2) * 1.25, node2?.width ?? 0); const h2 = Math.max(minHeight, bbox.height + (node2.padding ?? 0) * 2, node2?.height ?? 0); const radius2 = h2 / 2; const { cssStyles } = node2; const rc = at.svg(shapeSvg); const options3 = userNodeOverrides(node2, {}); if (node2.look !== "handDrawn") { options3.roughness = 0; options3.fillStyle = "solid"; } const totalWidth = w3, totalHeight = h2; 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, options3); const polygon2 = shapeSvg.insert(() => shapeNode, ":first-child"); polygon2.attr("class", "basic label-container"); 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(${-w3 / 2}, ${-h2 / 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 { shapeSvg, bbox, label } = await labelHelper(parent4, node2, getNodeClasses(node2)); const w3 = Math.max(bbox.width + node2.padding, node2.width ?? 0); const rx = w3 / 2; const ry = rx / (2.5 + w3 / 50); const h2 = Math.max(bbox.height + ry + node2.padding, node2.height ?? 0); let cylinder3; const { cssStyles } = node2; if (node2.look === "handDrawn") { const rc = at.svg(shapeSvg); const outerPathData = createOuterCylinderPathD(0, 0, w3, h2, rx, ry); const innerPathData = createInnerCylinderPathD(0, ry, w3, h2, 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 = createCylinderPathD(0, 0, w3, h2, 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("label-offset-y", ry); cylinder3.attr("transform", `translate(${-w3 / 2}, ${-(h2 / 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 y5 = ry * ry * (1 - x5 * x5 / (rx * rx)); if (y5 > 0) { y5 = Math.sqrt(y5); } y5 = ry - y5; if (point8.y - (node2.y ?? 0) > 0) { y5 = -y5; } pos.y += y5; } return pos; }; return shapeSvg; } var createCylinderPathD, createOuterCylinderPathD, createInnerCylinderPathD; 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, y5, width3, height2, rx, ry) => { return [ `M${x5},${y5 + 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, y5, width3, height2, rx, ry) => { return [ `M${x5},${y5 + ry}`, `M${x5 + width3},${y5 + 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, y5, width3, height2, rx, ry) => { return [`M${x5 - width3 / 2},${-height2 / 2}`, `a${rx},${ry} 0,0,0 ${width3},0`].join(" "); }, "createInnerCylinderPathD"); __name(cylinder, "cylinder"); } }); // src/rendering-util/rendering-elements/shapes/dividedRect.ts async function dividedRectangle(parent4, node2) { const { labelStyles, nodeStyles } = styles2String(node2); node2.labelStyle = labelStyles; const { shapeSvg, bbox, label } = await labelHelper(parent4, node2, getNodeClasses(node2)); const w3 = bbox.width + node2.padding; const h2 = bbox.height + node2.padding; const rectOffset = h2 * 0.2; const x5 = -w3 / 2; const y5 = -h2 / 2 - rectOffset / 2; const { cssStyles } = node2; const rc = at.svg(shapeSvg); const options3 = userNodeOverrides(node2, {}); if (node2.look !== "handDrawn") { options3.roughness = 0; options3.fillStyle = "solid"; } const pts2 = [ { x: x5, y: y5 + rectOffset }, { x: -x5, y: y5 + rectOffset }, { x: -x5, y: -y5 }, { x: x5, y: -y5 }, { x: x5, y: y5 }, { x: -x5, y: y5 }, { x: -x5, y: y5 + rectOffset } ]; const poly = rc.polygon( pts2.map((p3) => [p3.x, p3.y]), options3 ); const polygon2 = shapeSvg.insert(() => poly, ":first-child"); polygon2.attr("class", "basic label-container"); 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))}, ${y5 + rectOffset + (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); node2.labelStyle = labelStyles; const { shapeSvg, bbox, halfPadding } = await labelHelper(parent4, node2, getNodeClasses(node2)); const gap = 5; const outerRadius = bbox.width / 2 + halfPadding + gap; const innerRadius = bbox.width / 2 + halfPadding; 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 options3 = userNodeOverrides(node2, { fillStyle: "solid" }); if (node2.look !== "handDrawn") { options3.roughness = 0; } const circleNode = rc.circle(0, 0, radius2 * 2, options3); 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 { shapeSvg, bbox, label } = await labelHelper(parent4, node2, getNodeClasses(node2)); const w3 = bbox.width + (node2.padding ?? 0); const h2 = w3 + bbox.height; const tw = w3 + bbox.height; const points = [ { x: 0, y: -h2 }, { x: tw, y: -h2 }, { x: tw / 2, y: 0 } ]; const { cssStyles } = node2; const rc = at.svg(shapeSvg); const options3 = userNodeOverrides(node2, {}); if (node2.look !== "handDrawn") { options3.roughness = 0; options3.fillStyle = "solid"; } const pathData = createPathFromPoints(points); const roughNode = rc.path(pathData, options3); const flippedTriangle2 = shapeSvg.insert(() => roughNode, ":first-child").attr("transform", `translate(${-h2 / 2}, ${h2 / 2})`); if (cssStyles && node2.look !== "handDrawn") { flippedTriangle2.selectChildren("path").attr("style", cssStyles); } if (nodeStyles && node2.look !== "handDrawn") { flippedTriangle2.selectChildren("path").attr("style", nodeStyles); } node2.width = w3; node2.height = h2; updateNodeBounds(node2, flippedTriangle2); label.attr( "transform", `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))}, ${-h2 / 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 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(); __name(flippedTriangle, "flippedTriangle"); } }); // src/rendering-util/rendering-elements/shapes/forkJoin.ts function forkJoin(parent4, node2, { dir: dir2, config: { state: state5, 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 y5 = -1 * height2 / 2; const rc = at.svg(shapeSvg); const options3 = userNodeOverrides(node2, { stroke: themeVariables.lineColor, fill: themeVariables.lineColor }); if (node2.look !== "handDrawn") { options3.roughness = 0; options3.fillStyle = "solid"; } const roughNode = rc.rectangle(x5, y5, width3, height2, options3); 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 padding2 = state5?.padding ?? 0; if (node2.width && node2.height) { node2.width += padding2 / 2 || 0; node2.height += padding2 / 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 = 80, minHeight = 50; const { shapeSvg, bbox } = await labelHelper(parent4, node2, getNodeClasses(node2)); const w3 = Math.max(minWidth, bbox.width + (node2.padding ?? 0) * 2, node2?.width ?? 0); const h2 = Math.max(minHeight, bbox.height + (node2.padding ?? 0) * 2, node2?.height ?? 0); const radius2 = h2 / 2; const { cssStyles } = node2; const rc = at.svg(shapeSvg); const options3 = userNodeOverrides(node2, {}); if (node2.look !== "handDrawn") { options3.roughness = 0; options3.fillStyle = "solid"; } const points = [ { x: -w3 / 2, y: -h2 / 2 }, { x: w3 / 2 - radius2, y: -h2 / 2 }, ...generateCirclePoints(-w3 / 2 + radius2, 0, radius2, 50, 90, 270), { x: w3 / 2 - radius2, y: h2 / 2 }, { x: -w3 / 2, y: h2 / 2 } ]; const pathData = createPathFromPoints(points); const shapeNode = rc.path(pathData, options3); const polygon2 = shapeSvg.insert(() => shapeNode, ":first-child"); polygon2.attr("class", "basic label-container"); 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); node2.labelStyle = labelStyles; const { shapeSvg, bbox } = await labelHelper(parent4, node2, getNodeClasses(node2)); const f3 = 4; const h2 = bbox.height + node2.padding; const m2 = h2 / f3; const w3 = bbox.width + 2 * m2 + node2.padding; const points = [ { x: m2, y: 0 }, { x: w3 - m2, y: 0 }, { x: w3, y: -h2 / 2 }, { x: w3 - m2, y: -h2 }, { x: m2, y: -h2 }, { x: 0, y: -h2 / 2 } ]; let polygon2; const { cssStyles } = node2; if (node2.look === "handDrawn") { const rc = at.svg(shapeSvg); const options3 = userNodeOverrides(node2, {}); const pathData = createHexagonPathD(0, 0, w3, h2, m2); const roughNode = rc.path(pathData, options3); polygon2 = shapeSvg.insert(() => roughNode, ":first-child").attr("transform", `translate(${-w3 / 2}, ${h2 / 2})`); if (cssStyles) { polygon2.attr("style", cssStyles); } } else { polygon2 = insertPolygonShape(shapeSvg, w3, h2, points); } if (nodeStyles) { polygon2.attr("style", nodeStyles); } node2.width = w3; node2.height = h2; 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, y5, width3, height2, m2) => { return [ `M${x5 + m2},${y5}`, `L${x5 + width3 - m2},${y5}`, `L${x5 + width3},${y5 - height2 / 2}`, `L${x5 + width3 - m2},${y5 - height2}`, `L${x5 + m2},${y5 - height2}`, `L${x5},${y5 - 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 w3 = Math.max(30, node2?.width ?? 0); const h2 = Math.max(30, node2?.height ?? 0); const { cssStyles } = node2; const rc = at.svg(shapeSvg); const options3 = userNodeOverrides(node2, {}); if (node2.look !== "handDrawn") { options3.roughness = 0; options3.fillStyle = "solid"; } const points = [ { x: 0, y: 0 }, { x: w3, y: 0 }, { x: 0, y: h2 }, { x: w3, y: h2 } ]; const pathData = createPathFromPoints(points); const shapeNode = rc.path(pathData, options3); const polygon2 = shapeSvg.insert(() => shapeNode, ":first-child"); polygon2.attr("class", "basic label-container"); 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(${-w3 / 2}, ${-h2 / 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 y5 = -height2 / 2; const labelPadding = node2.label ? 8 : 0; const rc = at.svg(shapeSvg); const options3 = userNodeOverrides(node2, { stroke: "none", fill: "none" }); if (node2.look !== "handDrawn") { options3.roughness = 0; options3.fillStyle = "solid"; } const iconNode = rc.rectangle(x5, y5, width3, height2, options3); const outerWidth = Math.max(width3, bbox.width); const outerHeight = height2 + bbox.height + labelPadding; const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, { ...options3, 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( `${await getIconSVG(node2.icon, { height: iconSize, width: iconSize, fallbackPrefix: "" })}` ); 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 padding2 = 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 options3 = userNodeOverrides(node2, {}); if (node2.look !== "handDrawn") { options3.roughness = 0; options3.fillStyle = "solid"; } const fill = stylesMap.get("fill"); options3.stroke = fill ?? mainBkg; const iconElem = shapeSvg.append("g"); if (node2.icon) { iconElem.html( `${await getIconSVG(node2.icon, { height: iconSize, width: iconSize, fallbackPrefix: "" })}` ); } 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 + padding2 * 2; const iconNode = rc.circle(0, 0, diameter, options3); const outerWidth = Math.max(diameter, bbox.width); const outerHeight = diameter + bbox.height + labelPadding; const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, { ...options3, 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/roundedRectPath.ts var createRoundedRectPathD; var init_roundedRectPath = __esm({ "src/rendering-util/rendering-elements/shapes/roundedRectPath.ts"() { "use strict"; createRoundedRectPathD = /* @__PURE__ */ __name((x5, y5, totalWidth, totalHeight, radius2) => [ "M", x5 + radius2, y5, // 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, y5 + radius2, // Draw arc to the right top corner "V", y5 + totalHeight - radius2, // Draw vertical line down to the beginning of the right bottom corner "A", radius2, radius2, 0, 0, 1, x5 + totalWidth - radius2, y5 + 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, y5 + totalHeight - radius2, // Draw arc to the left bottom corner "V", y5 + radius2, // Draw vertical line up to the beginning of the left top corner "A", radius2, radius2, 0, 0, 1, x5 + radius2, y5, // Draw arc to the left top corner "Z" // Close the path ].join(" "), "createRoundedRectPathD"); } }); // 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 y5 = -height2 / 2; const labelPadding = node2.label ? 8 : 0; const rc = at.svg(shapeSvg); const options3 = userNodeOverrides(node2, {}); if (node2.look !== "handDrawn") { options3.roughness = 0; options3.fillStyle = "solid"; } const fill = stylesMap.get("fill"); options3.stroke = fill ?? mainBkg; const iconNode = rc.path(createRoundedRectPathD(x5, y5, width3, height2, 5), options3); const outerWidth = Math.max(width3, bbox.width); const outerHeight = height2 + bbox.height + labelPadding; const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, { ...options3, 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( `${await getIconSVG(node2.icon, { height: iconSize, width: iconSize, fallbackPrefix: "" })}` ); 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 y5 = -height2 / 2; const labelPadding = node2.label ? 8 : 0; const rc = at.svg(shapeSvg); const options3 = userNodeOverrides(node2, {}); if (node2.look !== "handDrawn") { options3.roughness = 0; options3.fillStyle = "solid"; } const fill = stylesMap.get("fill"); options3.stroke = fill ?? mainBkg; const iconNode = rc.path(createRoundedRectPathD(x5, y5, width3, height2, 0.1), options3); const outerWidth = Math.max(width3, bbox.width); const outerHeight = height2 + bbox.height + labelPadding; const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, { ...options3, 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( `${await getIconSVG(node2.icon, { height: iconSize, width: iconSize, fallbackPrefix: "" })}` ); 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 y5 = -imageHeight / 2; const labelPadding = node2.label ? 8 : 0; const rc = at.svg(shapeSvg); const options3 = userNodeOverrides(node2, {}); if (node2.look !== "handDrawn") { options3.roughness = 0; options3.fillStyle = "solid"; } const imageNode = rc.rectangle(x5, y5, imageWidth, imageHeight, options3); const outerWidth = Math.max(imageWidth, bbox.width); const outerHeight = imageHeight + bbox.height + labelPadding; const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, { ...options3, 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 { shapeSvg, bbox } = await labelHelper(parent4, node2, getNodeClasses(node2)); const w3 = Math.max(bbox.width + (node2.padding ?? 0) * 2, node2?.width ?? 0); const h2 = Math.max(bbox.height + (node2.padding ?? 0) * 2, node2?.height ?? 0); const points = [ { x: 0, y: 0 }, { x: w3, y: 0 }, { x: w3 + 3 * h2 / 6, y: -h2 }, { x: -3 * h2 / 6, y: -h2 } ]; let polygon2; const { cssStyles } = node2; if (node2.look === "handDrawn") { const rc = at.svg(shapeSvg); const options3 = userNodeOverrides(node2, {}); const pathData = createPathFromPoints(points); const roughNode = rc.path(pathData, options3); polygon2 = shapeSvg.insert(() => roughNode, ":first-child").attr("transform", `translate(${-w3 / 2}, ${h2 / 2})`); if (cssStyles) { polygon2.attr("style", cssStyles); } } else { polygon2 = insertPolygonShape(shapeSvg, w3, h2, points); } if (nodeStyles) { polygon2.attr("style", nodeStyles); } node2.width = w3; node2.height = h2; 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/drawRect.ts async function drawRect3(parent4, node2, options3) { const { labelStyles, nodeStyles } = styles2String(node2); node2.labelStyle = labelStyles; const { shapeSvg, bbox } = await labelHelper(parent4, node2, getNodeClasses(node2)); const totalWidth = Math.max(bbox.width + options3.labelPaddingX * 2, node2?.width || 0); const totalHeight = Math.max(bbox.height + options3.labelPaddingY * 2, node2?.height || 0); const x5 = -totalWidth / 2; const y5 = -totalHeight / 2; let rect3; let { rx, ry } = node2; const { cssStyles } = node2; if (options3?.rx && options3.ry) { rx = options3.rx; ry = options3.ry; } if (node2.look === "handDrawn") { const rc = at.svg(shapeSvg); const options4 = userNodeOverrides(node2, {}); const roughNode = rx || ry ? rc.path(createRoundedRectPathD(x5, y5, totalWidth, totalHeight, rx || 0), options4) : rc.rectangle(x5, y5, totalWidth, totalHeight, options4); 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", y5).attr("width", totalWidth).attr("height", totalHeight); } updateNodeBounds(node2, rect3); 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/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 { shapeSvg, bbox } = await labelHelper(parent4, node2, getNodeClasses(node2)); const w3 = Math.max(bbox.width + (node2.padding ?? 0), node2?.width ?? 0); const h2 = Math.max(bbox.height + (node2.padding ?? 0), node2?.height ?? 0); const points = [ { x: 0, y: 0 }, { x: w3 + 3 * h2 / 6, y: 0 }, { x: w3, y: -h2 }, { x: -(3 * h2) / 6, y: -h2 } ]; let polygon2; const { cssStyles } = node2; if (node2.look === "handDrawn") { const rc = at.svg(shapeSvg); const options3 = userNodeOverrides(node2, {}); const pathData = createPathFromPoints(points); const roughNode = rc.path(pathData, options3); polygon2 = shapeSvg.insert(() => roughNode, ":first-child").attr("transform", `translate(${-w3 / 2}, ${h2 / 2})`); if (cssStyles) { polygon2.attr("style", cssStyles); } } else { polygon2 = insertPolygonShape(shapeSvg, w3, h2, points); } if (nodeStyles) { polygon2.attr("style", nodeStyles); } node2.width = w3; node2.height = h2; 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 { shapeSvg, bbox } = await labelHelper(parent4, node2, getNodeClasses(node2)); const w3 = Math.max(bbox.width + (node2.padding ?? 0), node2?.width ?? 0); const h2 = Math.max(bbox.height + (node2.padding ?? 0), node2?.height ?? 0); const points = [ { x: -3 * h2 / 6, y: 0 }, { x: w3, y: 0 }, { x: w3 + 3 * h2 / 6, y: -h2 }, { x: 0, y: -h2 } ]; let polygon2; const { cssStyles } = node2; if (node2.look === "handDrawn") { const rc = at.svg(shapeSvg); const options3 = userNodeOverrides(node2, {}); const pathData = createPathFromPoints(points); const roughNode = rc.path(pathData, options3); polygon2 = shapeSvg.insert(() => roughNode, ":first-child").attr("transform", `translate(${-w3 / 2}, ${h2 / 2})`); if (cssStyles) { polygon2.attr("style", cssStyles); } } else { polygon2 = insertPolygonShape(shapeSvg, w3, h2, points); } if (nodeStyles) { polygon2.attr("style", nodeStyles); } node2.width = w3; node2.height = h2; 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 options3 = userNodeOverrides(node2, {}); if (node2.look !== "handDrawn") { options3.roughness = 0; options3.fillStyle = "solid"; } const linePath = createPathFromPoints(points); const lineNode = rc.path(linePath, options3); const lightningBolt2 = shapeSvg.insert(() => lineNode, ":first-child"); 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 { shapeSvg, bbox, label } = await labelHelper(parent4, node2, getNodeClasses(node2)); const w3 = Math.max(bbox.width + (node2.padding ?? 0), node2.width ?? 0); const rx = w3 / 2; const ry = rx / (2.5 + w3 / 50); const h2 = Math.max(bbox.height + ry + (node2.padding ?? 0), node2.height ?? 0); const outerOffset = h2 * 0.1; let cylinder3; const { cssStyles } = node2; if (node2.look === "handDrawn") { const rc = at.svg(shapeSvg); const outerPathData = createOuterCylinderPathD2(0, 0, w3, h2, rx, ry, outerOffset); const innerPathData = createInnerCylinderPathD2(0, ry, w3, h2, rx, ry); const options3 = userNodeOverrides(node2, {}); const outerNode = rc.path(outerPathData, options3); const innerLine = rc.path(innerPathData, options3); 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, w3, h2, rx, ry, outerOffset); cylinder3 = shapeSvg.insert("path", ":first-child").attr("d", pathData).attr("class", "basic label-container").attr("style", handleUndefinedAttr(cssStyles)).attr("style", nodeStyles); } cylinder3.attr("label-offset-y", ry); cylinder3.attr("transform", `translate(${-w3 / 2}, ${-(h2 / 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 y5 = ry * ry * (1 - x5 * x5 / (rx * rx)); if (y5 > 0) { y5 = Math.sqrt(y5); } y5 = ry - y5; if (point8.y - (node2.y ?? 0) > 0) { y5 = -y5; } pos.y += y5; } return pos; }; return shapeSvg; } var createCylinderPathD2, createOuterCylinderPathD2, createInnerCylinderPathD2; 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, y5, width3, height2, rx, ry, outerOffset) => { return [ `M${x5},${y5 + 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},${y5 + ry + outerOffset}`, `a${rx},${ry} 0,0,0 ${width3},0` ].join(" "); }, "createCylinderPathD"); createOuterCylinderPathD2 = /* @__PURE__ */ __name((x5, y5, width3, height2, rx, ry, outerOffset) => { return [ `M${x5},${y5 + ry}`, `M${x5 + width3},${y5 + ry}`, `a${rx},${ry} 0,0,0 ${-width3},0`, `l0,${height2}`, `a${rx},${ry} 0,0,0 ${width3},0`, `l0,${-height2}`, `M${x5},${y5 + ry + outerOffset}`, `a${rx},${ry} 0,0,0 ${width3},0` ].join(" "); }, "createOuterCylinderPathD"); createInnerCylinderPathD2 = /* @__PURE__ */ __name((x5, y5, width3, height2, rx, ry) => { return [`M${x5 - width3 / 2},${-height2 / 2}`, `a${rx},${ry} 0,0,0 ${width3},0`].join(" "); }, "createInnerCylinderPathD"); __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 { shapeSvg, bbox, label } = await labelHelper(parent4, node2, getNodeClasses(node2)); const w3 = Math.max(bbox.width + (node2.padding ?? 0) * 2, node2?.width ?? 0); const h2 = Math.max(bbox.height + (node2.padding ?? 0) * 2, node2?.height ?? 0); const waveAmplitude = h2 / 4; const finalH = h2 + waveAmplitude; const { cssStyles } = node2; const rc = at.svg(shapeSvg); const options3 = userNodeOverrides(node2, {}); if (node2.look !== "handDrawn") { options3.roughness = 0; options3.fillStyle = "solid"; } const points = [ { x: -w3 / 2 - w3 / 2 * 0.1, y: -finalH / 2 }, { x: -w3 / 2 - w3 / 2 * 0.1, y: finalH / 2 }, ...generateFullSineWavePoints( -w3 / 2 - w3 / 2 * 0.1, finalH / 2, w3 / 2 + w3 / 2 * 0.1, finalH / 2, waveAmplitude, 0.8 ), { x: w3 / 2 + w3 / 2 * 0.1, y: -finalH / 2 }, { x: -w3 / 2 - w3 / 2 * 0.1, y: -finalH / 2 }, { x: -w3 / 2, y: -finalH / 2 }, { x: -w3 / 2, y: finalH / 2 * 1.1 }, { x: -w3 / 2, y: -finalH / 2 } ]; const poly = rc.polygon( points.map((p3) => [p3.x, p3.y]), options3 ); const waveEdgeRect = shapeSvg.insert(() => poly, ":first-child"); waveEdgeRect.attr("class", "basic label-container"); 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(${-w3 / 2 + (node2.padding ?? 0) + w3 / 2 * 0.1 / 2 - (bbox.x - (bbox.left ?? 0))},${-h2 / 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 { shapeSvg, bbox, label } = await labelHelper(parent4, node2, getNodeClasses(node2)); const w3 = Math.max(bbox.width + (node2.padding ?? 0) * 2, node2?.width ?? 0); const h2 = Math.max(bbox.height + (node2.padding ?? 0) * 2, node2?.height ?? 0); const rectOffset = 5; const x5 = -w3 / 2; const y5 = -h2 / 2; const { cssStyles } = node2; const rc = at.svg(shapeSvg); const options3 = userNodeOverrides(node2, {}); const outerPathPoints = [ { x: x5 - rectOffset, y: y5 + rectOffset }, { x: x5 - rectOffset, y: y5 + h2 + rectOffset }, { x: x5 + w3 - rectOffset, y: y5 + h2 + rectOffset }, { x: x5 + w3 - rectOffset, y: y5 + h2 }, { x: x5 + w3, y: y5 + h2 }, { x: x5 + w3, y: y5 + h2 - rectOffset }, { x: x5 + w3 + rectOffset, y: y5 + h2 - rectOffset }, { x: x5 + w3 + rectOffset, y: y5 - rectOffset }, { x: x5 + rectOffset, y: y5 - rectOffset }, { x: x5 + rectOffset, y: y5 }, { x: x5, y: y5 }, { x: x5, y: y5 + rectOffset } ]; const innerPathPoints = [ { x: x5, y: y5 + rectOffset }, { x: x5 + w3 - rectOffset, y: y5 + rectOffset }, { x: x5 + w3 - rectOffset, y: y5 + h2 }, { x: x5 + w3, y: y5 + h2 }, { x: x5 + w3, y: y5 }, { x: x5, y: y5 } ]; if (node2.look !== "handDrawn") { options3.roughness = 0; options3.fillStyle = "solid"; } const outerPath = createPathFromPoints(outerPathPoints); const outerNode = rc.path(outerPath, options3); const innerPath3 = createPathFromPoints(innerPathPoints); const innerNode = rc.path(innerPath3, { ...options3, fill: "none" }); const multiRect2 = shapeSvg.insert(() => innerNode, ":first-child"); multiRect2.insert(() => outerNode, ":first-child"); multiRect2.attr("class", "basic label-container"); 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) - rectOffset - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + rectOffset - (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 w3 = Math.max(bbox.width + (node2.padding ?? 0) * 2, node2?.width ?? 0); const h2 = Math.max(bbox.height + (node2.padding ?? 0) * 2, node2?.height ?? 0); const waveAmplitude = h2 / 4; const finalH = h2 + waveAmplitude; const x5 = -w3 / 2; const y5 = -finalH / 2; const rectOffset = 5; const { cssStyles } = node2; const wavePoints = generateFullSineWavePoints( x5 - rectOffset, y5 + finalH + rectOffset, x5 + w3 - rectOffset, y5 + finalH + rectOffset, waveAmplitude, 0.8 ); const lastWavePoint = wavePoints?.[wavePoints.length - 1]; const outerPathPoints = [ { x: x5 - rectOffset, y: y5 + rectOffset }, { x: x5 - rectOffset, y: y5 + finalH + rectOffset }, ...wavePoints, { x: x5 + w3 - rectOffset, y: lastWavePoint.y - rectOffset }, { x: x5 + w3, y: lastWavePoint.y - rectOffset }, { x: x5 + w3, y: lastWavePoint.y - 2 * rectOffset }, { x: x5 + w3 + rectOffset, y: lastWavePoint.y - 2 * rectOffset }, { x: x5 + w3 + rectOffset, y: y5 - rectOffset }, { x: x5 + rectOffset, y: y5 - rectOffset }, { x: x5 + rectOffset, y: y5 }, { x: x5, y: y5 }, { x: x5, y: y5 + rectOffset } ]; const innerPathPoints = [ { x: x5, y: y5 + rectOffset }, { x: x5 + w3 - rectOffset, y: y5 + rectOffset }, { x: x5 + w3 - rectOffset, y: lastWavePoint.y - rectOffset }, { x: x5 + w3, y: lastWavePoint.y - rectOffset }, { x: x5 + w3, y: y5 }, { x: x5, y: y5 } ]; const rc = at.svg(shapeSvg); const options3 = userNodeOverrides(node2, {}); if (node2.look !== "handDrawn") { options3.roughness = 0; options3.fillStyle = "solid"; } const outerPath = createPathFromPoints(outerPathPoints); const outerNode = rc.path(outerPath, options3); const innerPath3 = createPathFromPoints(innerPathPoints); const innerNode = rc.path(innerPath3, options3); const shape = shapeSvg.insert(() => outerNode, ":first-child"); shape.insert(() => innerNode); shape.attr("class", "basic label-container"); 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) - rectOffset - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + rectOffset - 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 || getConfig().flowchart?.htmlLabels !== false; if (!useHtmlLabels) { node2.centerLabel = true; } const { shapeSvg, bbox } = 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 y5 = -totalHeight / 2; const { cssStyles } = node2; const rc = at.svg(shapeSvg); const options3 = userNodeOverrides(node2, { fill: themeVariables.noteBkgColor, stroke: themeVariables.noteBorderColor }); if (node2.look !== "handDrawn") { options3.roughness = 0; options3.fillStyle = "solid"; } const noteShapeNode = rc.rectangle(x5, y5, totalWidth, totalHeight, options3); const rect3 = shapeSvg.insert(() => noteShapeNode, ":first-child"); rect3.attr("class", "basic label-container"); if (cssStyles && node2.look !== "handDrawn") { rect3.selectAll("path").attr("style", cssStyles); } if (nodeStyles && node2.look !== "handDrawn") { rect3.selectAll("path").attr("style", nodeStyles); } 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(); __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 w3 = bbox.width + node2.padding; const h2 = bbox.height + node2.padding; const s2 = w3 + h2; 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 options3 = userNodeOverrides(node2, {}); const pathData = createDecisionBoxPathD(0, 0, s2); const roughNode = rc.path(pathData, options3); polygon2 = shapeSvg.insert(() => roughNode, ":first-child").attr("transform", `translate(${-s2 / 2}, ${s2 / 2})`); if (cssStyles) { polygon2.attr("style", cssStyles); } } else { polygon2 = insertPolygonShape(shapeSvg, s2, s2, points); } if (nodeStyles) { polygon2.attr("style", nodeStyles); } updateNodeBounds(node2, polygon2); node2.intersect = function(point8) { log.debug( "APA12 Intersect called SPLIT\npoint:", point8, "\nnode:\n", node2, "\nres:", intersect_default.polygon(node2, points, point8) ); return intersect_default.polygon(node2, points, point8); }; return shapeSvg; } var createDecisionBoxPathD; var init_question = __esm({ "src/rendering-util/rendering-elements/shapes/question.ts"() { "use strict"; init_logger(); init_util(); init_intersect(); init_handDrawnShapeStyles(); init_rough_esm(); init_insertPolygonShape(); createDecisionBoxPathD = /* @__PURE__ */ __name((x5, y5, size5) => { return [ `M${x5 + size5 / 2},${y5}`, `L${x5 + size5},${y5 - size5 / 2}`, `L${x5 + size5 / 2},${y5 - size5}`, `L${x5},${y5 - size5 / 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 { shapeSvg, bbox, label } = await labelHelper(parent4, node2, getNodeClasses(node2)); const w3 = Math.max(bbox.width + (node2.padding ?? 0), node2?.width ?? 0); const h2 = Math.max(bbox.height + (node2.padding ?? 0), node2?.height ?? 0); const x5 = -w3 / 2; const y5 = -h2 / 2; const notch = y5 / 2; const points = [ { x: x5 + notch, y: y5 }, { x: x5, y: 0 }, { x: x5 + notch, y: -y5 }, { x: -x5, y: -y5 }, { x: -x5, y: y5 } ]; const { cssStyles } = node2; const rc = at.svg(shapeSvg); const options3 = userNodeOverrides(node2, {}); if (node2.look !== "handDrawn") { options3.roughness = 0; options3.fillStyle = "solid"; } const pathData = createPathFromPoints(points); const roughNode = rc.path(pathData, options3); const polygon2 = shapeSvg.insert(() => roughNode, ":first-child"); polygon2.attr("class", "basic label-container"); 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 function applyStyle2(dom, styleFn) { if (styleFn) { dom.attr("style", styleFn); } } async function addHtmlLabel(node2) { const fo = select_default2(document.createElementNS("http://www.w3.org/2000/svg", "foreignObject")); const div = fo.append("xhtml:div"); let label = node2.label; if (node2.label && hasKatex(node2.label)) { label = await renderKatex(node2.label.replace(common_default.lineBreakRegex, "\n"), getConfig2()); } const labelClass = node2.isNode ? "nodeLabel" : "edgeLabel"; div.html( '" + label + "" ); applyStyle2(div, node2.labelStyle); div.style("display", "inline-block"); div.style("padding-right", "1px"); div.style("white-space", "nowrap"); div.attr("xmlns", "http://www.w3.org/1999/xhtml"); return fo.node(); } var createLabel, createLabel_default; var init_createLabel = __esm({ "src/rendering-util/rendering-elements/createLabel.js"() { "use strict"; init_src32(); init_logger(); init_diagramAPI(); init_common(); init_utils2(); __name(applyStyle2, "applyStyle"); __name(addHtmlLabel, "addHtmlLabel"); createLabel = /* @__PURE__ */ __name(async (_vertexText, style3, isTitle, isNode2) => { let vertexText = _vertexText || ""; if (typeof vertexText === "object") { vertexText = vertexText[0]; } if (evaluate(getConfig2().flowchart.htmlLabels)) { vertexText = vertexText.replace(/\\n|\n/g, "
    "); log.info("vertexText" + vertexText); const node2 = { isNode: isNode2, label: decodeEntities(vertexText).replace( /fa[blrs]?:fa-[\w-]+/g, (s2) => `` ), labelStyle: style3 ? style3.replace("fill:", "color:") : style3 }; let vertexNode = await addHtmlLabel(node2); return vertexNode; } else { const svgLabel = document.createElementNS("http://www.w3.org/2000/svg", "text"); svgLabel.setAttribute("style", style3.replace("color:", "fill:")); let rows = []; if (typeof vertexText === "string") { rows = vertexText.split(/\\n|\n|/gi); } else if (Array.isArray(vertexText)) { rows = vertexText; } else { rows = []; } for (const row of rows) { 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"); if (isTitle) { tspan.setAttribute("class", "title-row"); } else { tspan.setAttribute("class", "row"); } tspan.textContent = row.trim(); svgLabel.appendChild(tspan); } return svgLabel; } }, "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 classes6; if (!node2.cssClasses) { classes6 = "node default"; } else { classes6 = "node " + node2.cssClasses; } const shapeSvg = parent4.insert("g").attr("class", classes6).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 text3 = label.node().appendChild(await createLabel_default(title2, node2.labelStyle, true, true)); let bbox = { width: 0, height: 0 }; if (evaluate(getConfig2()?.flowchart?.htmlLabels)) { const div2 = text3.children[0]; const dv2 = select_default2(text3); bbox = div2.getBoundingClientRect(); dv2.attr("width", bbox.width); dv2.attr("height", bbox.height); } log.info("Text 2", description); const textRows = description || []; const titleBox = text3.getBBox(); const descr = label.node().appendChild( await createLabel_default( textRows.join ? textRows.join("
    ") : 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(text3).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 y5 = -bbox.height / 2 - halfPadding; let rect3; let innerLine; if (node2.look === "handDrawn") { const rc = at.svg(shapeSvg); const options3 = userNodeOverrides(node2, {}); const roughNode = rc.path( createRoundedRectPathD(x5, y5, totalWidth, totalHeight, node2.rx || 0), options3 ); 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, options3 ); 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_common(); init_util(); init_createLabel(); init_intersect(); init_handDrawnShapeStyles(); init_rough_esm(); init_diagramAPI(); init_roundedRectPath(); init_logger(); __name(rectWithTitle, "rectWithTitle"); } }); // src/rendering-util/rendering-elements/shapes/roundedRect.ts async function roundedRect(parent4, node2) { const options3 = { rx: 5, ry: 5, classes: "", labelPaddingX: (node2?.padding || 0) * 1, labelPaddingY: (node2?.padding || 0) * 1 }; return drawRect3(parent4, node2, options3); } 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 { shapeSvg, bbox, label } = await labelHelper(parent4, node2, getNodeClasses(node2)); const halfPadding = node2?.padding ?? 0; const w3 = Math.max(bbox.width + (node2.padding ?? 0) * 2, node2?.width ?? 0); const h2 = Math.max(bbox.height + (node2.padding ?? 0) * 2, node2?.height ?? 0); const x5 = -bbox.width / 2 - halfPadding; const y5 = -bbox.height / 2 - halfPadding; const { cssStyles } = node2; const rc = at.svg(shapeSvg); const options3 = userNodeOverrides(node2, {}); if (node2.look !== "handDrawn") { options3.roughness = 0; options3.fillStyle = "solid"; } const points = [ { x: x5, y: y5 }, { x: x5 + w3 + 8, y: y5 }, { x: x5 + w3 + 8, y: y5 + h2 }, { x: x5 - 8, y: y5 + h2 }, { x: x5 - 8, y: y5 }, { x: x5, y: y5 }, { x: x5, y: y5 + h2 } ]; const roughNode = rc.polygon( points.map((p3) => [p3.x, p3.y]), options3 ); const rect3 = shapeSvg.insert(() => roughNode, ":first-child"); rect3.attr("class", "basic label-container").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(${-w3 / 2 + 4 + (node2.padding ?? 0) - (bbox.x - (bbox.left ?? 0))},${-h2 / 2 + (node2.padding ?? 0) - (bbox.y - (bbox.top ?? 0))})` ); updateNodeBounds(node2, rect3); node2.intersect = function(point8) { return intersect_default.rect(node2, point8); }; return shapeSvg; } 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(); __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 { shapeSvg, bbox, label } = await labelHelper(parent4, node2, getNodeClasses(node2)); const w3 = Math.max(bbox.width + (node2.padding ?? 0) * 2, node2?.width ?? 0); const h2 = Math.max(bbox.height + (node2.padding ?? 0) * 2, node2?.height ?? 0); const x5 = -w3 / 2; const y5 = -h2 / 2; const { cssStyles } = node2; const rc = at.svg(shapeSvg); const options3 = userNodeOverrides(node2, {}); if (node2.look !== "handDrawn") { options3.roughness = 0; options3.fillStyle = "solid"; } const points = [ { x: x5, y: y5 }, { x: x5, y: y5 + h2 }, { x: x5 + w3, y: y5 + h2 }, { x: x5 + w3, y: y5 - h2 / 2 } ]; const pathData = createPathFromPoints(points); const shapeNode = rc.path(pathData, options3); const polygon2 = shapeSvg.insert(() => shapeNode, ":first-child"); polygon2.attr("class", "basic label-container"); 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, ${h2 / 4})`); label.attr( "transform", `translate(${-w3 / 2 + (node2.padding ?? 0) - (bbox.x - (bbox.left ?? 0))}, ${-h2 / 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 options3 = { rx: 0, ry: 0, classes: "", labelPaddingX: (node2?.padding || 0) * 2, labelPaddingY: (node2?.padding || 0) * 1 }; return drawRect3(parent4, node2, options3); } 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 { shapeSvg, bbox } = await labelHelper(parent4, node2, getNodeClasses(node2)); const h2 = bbox.height + node2.padding; const w3 = bbox.width + h2 / 4 + node2.padding; let rect3; const { cssStyles } = node2; if (node2.look === "handDrawn") { const rc = at.svg(shapeSvg); const options3 = userNodeOverrides(node2, {}); const pathData = createRoundedRectPathD(-w3 / 2, -h2 / 2, w3, h2, h2 / 2); const roughNode = rc.path(pathData, 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", h2 / 2).attr("ry", h2 / 2).attr("x", -w3 / 2).attr("y", -h2 / 2).attr("width", w3).attr("height", h2); } updateNodeBounds(node2, rect3); node2.intersect = function(point8) { return intersect_default.rect(node2, point8); }; 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(); init_roundedRectPath(); init_utils2(); __name(stadium, "stadium"); } }); // src/rendering-util/rendering-elements/shapes/state.ts async function state(parent4, node2) { const options3 = { rx: 5, ry: 5, classes: "flowchart-node" }; return drawRect3(parent4, node2, options3); } 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 } = themeVariables; const shapeSvg = parent4.insert("g").attr("class", "node default").attr("id", node2.domId || node2.id); const rc = at.svg(shapeSvg); const options3 = userNodeOverrides(node2, {}); if (node2.look !== "handDrawn") { options3.roughness = 0; options3.fillStyle = "solid"; } const roughNode = rc.circle(0, 0, 14, { ...options3, stroke: lineColor, strokeWidth: 2 }); const innerFill = stateBorder ?? nodeBorder; const roughInnerNode = rc.circle(0, 0, 5, { ...options3, fill: innerFill, stroke: innerFill, strokeWidth: 2, fillStyle: "solid" }); const circle6 = shapeSvg.insert(() => roughNode, ":first-child"); circle6.insert(() => roughInnerNode); if (cssStyles) { circle6.selectAll("path").attr("style", cssStyles); } if (nodeStyles) { circle6.selectAll("path").attr("style", nodeStyles); } updateNodeBounds(node2, circle6); node2.intersect = function(point8) { return intersect_default.circle(node2, 7, 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 } = themeVariables; 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, 14, solidStateFill(lineColor)); circle6 = shapeSvg.insert(() => roughNode); circle6.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); } else { circle6 = shapeSvg.insert("circle", ":first-child"); circle6.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14); } updateNodeBounds(node2, circle6); node2.intersect = function(point8) { return intersect_default.circle(node2, 7, 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 { shapeSvg, bbox } = await labelHelper(parent4, node2, getNodeClasses(node2)); const halfPadding = (node2?.padding || 0) / 2; const w3 = bbox.width + node2.padding; const h2 = bbox.height + node2.padding; const x5 = -bbox.width / 2 - halfPadding; const y5 = -bbox.height / 2 - halfPadding; const points = [ { x: 0, y: 0 }, { x: w3, y: 0 }, { x: w3, y: -h2 }, { x: 0, y: -h2 }, { x: 0, y: 0 }, { x: -8, y: 0 }, { x: w3 + 8, y: 0 }, { x: w3 + 8, y: -h2 }, { x: -8, y: -h2 }, { x: -8, y: 0 } ]; if (node2.look === "handDrawn") { const rc = at.svg(shapeSvg); const options3 = userNodeOverrides(node2, {}); const roughNode = rc.rectangle(x5 - 8, y5, w3 + 16, h2, options3); const l1 = rc.line(x5, y5, x5, y5 + h2, options3); const l2 = rc.line(x5 + w3, y5, x5 + w3, y5 + h2, options3); shapeSvg.insert(() => l1, ":first-child"); shapeSvg.insert(() => l2, ":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, w3, h2, points); if (nodeStyles) { el.attr("style", nodeStyles); } updateNodeBounds(node2, el); } node2.intersect = function(point8) { return intersect_default.polygon(node2, points, point8); }; return shapeSvg; } 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(); __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 { shapeSvg, bbox } = await labelHelper(parent4, node2, getNodeClasses(node2)); const w3 = Math.max(bbox.width + (node2.padding ?? 0) * 2, node2?.width ?? 0); const h2 = Math.max(bbox.height + (node2.padding ?? 0) * 2, node2?.height ?? 0); const x5 = -w3 / 2; const y5 = -h2 / 2; const tagWidth = 0.2 * h2; const tagHeight = 0.2 * h2; const { cssStyles } = node2; const rc = at.svg(shapeSvg); const options3 = userNodeOverrides(node2, {}); const rectPoints = [ { x: x5 - tagWidth / 2, y: y5 }, { x: x5 + w3 + tagWidth / 2, y: y5 }, { x: x5 + w3 + tagWidth / 2, y: y5 + h2 }, { x: x5 - tagWidth / 2, y: y5 + h2 } ]; const tagPoints = [ { x: x5 + w3 - tagWidth / 2, y: y5 + h2 }, { x: x5 + w3 + tagWidth / 2, y: y5 + h2 }, { x: x5 + w3 + tagWidth / 2, y: y5 + h2 - tagHeight } ]; if (node2.look !== "handDrawn") { options3.roughness = 0; options3.fillStyle = "solid"; } const rectPath = createPathFromPoints(rectPoints); const rectNode = rc.path(rectPath, options3); const tagPath = createPathFromPoints(tagPoints); const tagNode = rc.path(tagPath, { ...options3, fillStyle: "solid" }); const taggedRect2 = shapeSvg.insert(() => tagNode, ":first-child"); taggedRect2.insert(() => rectNode, ":first-child"); taggedRect2.attr("class", "basic label-container"); 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 init_taggedRect = __esm({ "src/rendering-util/rendering-elements/shapes/taggedRect.ts"() { "use strict"; init_util(); init_handDrawnShapeStyles(); init_rough_esm(); init_intersect(); __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 w3 = Math.max(bbox.width + (node2.padding ?? 0) * 2, node2?.width ?? 0); const h2 = Math.max(bbox.height + (node2.padding ?? 0) * 2, node2?.height ?? 0); const waveAmplitude = h2 / 4; const tagWidth = 0.2 * w3; const tagHeight = 0.2 * h2; const finalH = h2 + waveAmplitude; const { cssStyles } = node2; const rc = at.svg(shapeSvg); const options3 = userNodeOverrides(node2, {}); if (node2.look !== "handDrawn") { options3.roughness = 0; options3.fillStyle = "solid"; } const points = [ { x: -w3 / 2 - w3 / 2 * 0.1, y: finalH / 2 }, ...generateFullSineWavePoints( -w3 / 2 - w3 / 2 * 0.1, finalH / 2, w3 / 2 + w3 / 2 * 0.1, finalH / 2, waveAmplitude, 0.8 ), { x: w3 / 2 + w3 / 2 * 0.1, y: -finalH / 2 }, { x: -w3 / 2 - w3 / 2 * 0.1, y: -finalH / 2 } ]; const x5 = -w3 / 2 + w3 / 2 * 0.1; const y5 = -finalH / 2 - tagHeight * 0.4; const tagPoints = [ { x: x5 + w3 - tagWidth, y: (y5 + h2) * 1.4 }, { x: x5 + w3, y: y5 + h2 - tagHeight }, { x: x5 + w3, y: (y5 + h2) * 0.9 }, ...generateFullSineWavePoints( x5 + w3, (y5 + h2) * 1.3, x5 + w3 - tagWidth, (y5 + h2) * 1.5, -h2 * 0.03, 0.5 ) ]; const waveEdgeRectPath = createPathFromPoints(points); const waveEdgeRectNode = rc.path(waveEdgeRectPath, options3); const taggedWaveEdgeRectPath = createPathFromPoints(tagPoints); const taggedWaveEdgeRectNode = rc.path(taggedWaveEdgeRectPath, { ...options3, fillStyle: "solid" }); const waveEdgeRect = shapeSvg.insert(() => taggedWaveEdgeRectNode, ":first-child"); waveEdgeRect.insert(() => waveEdgeRectNode, ":first-child"); waveEdgeRect.attr("class", "basic label-container"); 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(${-w3 / 2 + (node2.padding ?? 0) - (bbox.x - (bbox.left ?? 0))},${-h2 / 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 text2(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, node2?.width || 0); const totalHeight = Math.max(bbox.height + node2.padding, node2?.height || 0); const x5 = -totalWidth / 2; const y5 = -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", y5).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(text2, "text"); } }); // src/rendering-util/rendering-elements/shapes/tiltedCylinder.ts async function tiltedCylinder(parent4, node2) { const { labelStyles, nodeStyles } = styles2String(node2); node2.labelStyle = labelStyles; const { shapeSvg, bbox, label, halfPadding } = await labelHelper( parent4, node2, getNodeClasses(node2) ); const labelPadding = node2.look === "neo" ? halfPadding * 2 : halfPadding; const h2 = bbox.height + labelPadding; const ry = h2 / 2; const rx = ry / (2.5 + h2 / 50); const w3 = bbox.width + rx + labelPadding; const { cssStyles } = node2; let cylinder3; if (node2.look === "handDrawn") { const rc = at.svg(shapeSvg); const outerPathData = createOuterCylinderPathD3(0, 0, w3, h2, rx, ry); const innerPathData = createInnerCylinderPathD3(0, 0, w3, h2, 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, w3, h2, 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"); 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(${-w3 / 2}, ${h2 / 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 y5 = pos.y - (node2.y ?? 0); if (ry != 0 && (Math.abs(y5) < (node2.height ?? 0) / 2 || Math.abs(y5) == (node2.height ?? 0) / 2 && Math.abs(pos.x - (node2.x ?? 0)) > (node2.width ?? 0) / 2 - rx)) { let x5 = rx * rx * (1 - y5 * y5 / (ry * ry)); if (x5 != 0) { x5 = Math.sqrt(x5); } x5 = rx - x5; if (point8.x - (node2.x ?? 0) > 0) { x5 = -x5; } pos.x += x5; } return pos; }; return shapeSvg; } var createCylinderPathD3, createOuterCylinderPathD3, createInnerCylinderPathD3; 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, y5, width3, height2, rx, ry) => { return `M${x5},${y5} 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, y5, width3, height2, rx, ry) => { return [ `M${x5},${y5}`, `M${x5 + width3},${y5}`, `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, y5, width3, height2, rx, ry) => { return [`M${x5 + width3 / 2},${-height2 / 2}`, `a${rx},${ry} 0,0,0 0,${height2}`].join(" "); }, "createInnerCylinderPathD"); __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 { shapeSvg, bbox } = await labelHelper(parent4, node2, getNodeClasses(node2)); const w3 = bbox.width + node2.padding; const h2 = bbox.height + node2.padding; const points = [ { x: -3 * h2 / 6, y: 0 }, { x: w3 + 3 * h2 / 6, y: 0 }, { x: w3, y: -h2 }, { x: 0, y: -h2 } ]; let polygon2; const { cssStyles } = node2; if (node2.look === "handDrawn") { const rc = at.svg(shapeSvg); const options3 = userNodeOverrides(node2, {}); const pathData = createPathFromPoints(points); const roughNode = rc.path(pathData, options3); polygon2 = shapeSvg.insert(() => roughNode, ":first-child").attr("transform", `translate(${-w3 / 2}, ${h2 / 2})`); if (cssStyles) { polygon2.attr("style", cssStyles); } } else { polygon2 = insertPolygonShape(shapeSvg, w3, h2, points); } if (nodeStyles) { polygon2.attr("style", nodeStyles); } node2.width = w3; node2.height = h2; 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 { shapeSvg, bbox } = await labelHelper(parent4, node2, getNodeClasses(node2)); const minWidth = 60, minHeight = 20; const w3 = Math.max(minWidth, bbox.width + (node2.padding ?? 0) * 2, node2?.width ?? 0); const h2 = Math.max(minHeight, bbox.height + (node2.padding ?? 0) * 2, node2?.height ?? 0); const { cssStyles } = node2; const rc = at.svg(shapeSvg); const options3 = userNodeOverrides(node2, {}); if (node2.look !== "handDrawn") { options3.roughness = 0; options3.fillStyle = "solid"; } const points = [ { x: -w3 / 2 * 0.8, y: -h2 / 2 }, { x: w3 / 2 * 0.8, y: -h2 / 2 }, { x: w3 / 2, y: -h2 / 2 * 0.6 }, { x: w3 / 2, y: h2 / 2 }, { x: -w3 / 2, y: h2 / 2 }, { x: -w3 / 2, y: -h2 / 2 * 0.6 } ]; const pathData = createPathFromPoints(points); const shapeNode = rc.path(pathData, options3); const polygon2 = shapeSvg.insert(() => shapeNode, ":first-child"); polygon2.attr("class", "basic label-container"); 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 { shapeSvg, bbox, label } = await labelHelper(parent4, node2, getNodeClasses(node2)); const useHtmlLabels = evaluate(getConfig2().flowchart?.htmlLabels); const w3 = bbox.width + (node2.padding ?? 0); const h2 = w3 + bbox.height; const tw = w3 + bbox.height; const points = [ { x: 0, y: 0 }, { x: tw, y: 0 }, { x: tw / 2, y: -h2 } ]; const { cssStyles } = node2; const rc = at.svg(shapeSvg); const options3 = userNodeOverrides(node2, {}); if (node2.look !== "handDrawn") { options3.roughness = 0; options3.fillStyle = "solid"; } const pathData = createPathFromPoints(points); const roughNode = rc.path(pathData, options3); const polygon2 = shapeSvg.insert(() => roughNode, ":first-child").attr("transform", `translate(${-h2 / 2}, ${h2 / 2})`); if (cssStyles && node2.look !== "handDrawn") { polygon2.selectChildren("path").attr("style", cssStyles); } if (nodeStyles && node2.look !== "handDrawn") { polygon2.selectChildren("path").attr("style", nodeStyles); } node2.width = w3; node2.height = h2; updateNodeBounds(node2, polygon2); label.attr( "transform", `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))}, ${h2 / 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 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(); __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 { shapeSvg, bbox, label } = await labelHelper(parent4, node2, getNodeClasses(node2)); const w3 = Math.max(bbox.width + (node2.padding ?? 0) * 2, node2?.width ?? 0); const h2 = Math.max(bbox.height + (node2.padding ?? 0) * 2, node2?.height ?? 0); const waveAmplitude = h2 / 8; const finalH = h2 + waveAmplitude; const { cssStyles } = node2; const minWidth = 70; const widthDif = minWidth - w3; const extraW = widthDif > 0 ? widthDif / 2 : 0; const rc = at.svg(shapeSvg); const options3 = userNodeOverrides(node2, {}); if (node2.look !== "handDrawn") { options3.roughness = 0; options3.fillStyle = "solid"; } const points = [ { x: -w3 / 2 - extraW, y: finalH / 2 }, ...generateFullSineWavePoints( -w3 / 2 - extraW, finalH / 2, w3 / 2 + extraW, finalH / 2, waveAmplitude, 0.8 ), { x: w3 / 2 + extraW, y: -finalH / 2 }, { x: -w3 / 2 - extraW, y: -finalH / 2 } ]; const waveEdgeRectPath = createPathFromPoints(points); const waveEdgeRectNode = rc.path(waveEdgeRectPath, options3); const waveEdgeRect = shapeSvg.insert(() => waveEdgeRectNode, ":first-child"); waveEdgeRect.attr("class", "basic label-container"); 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(${-w3 / 2 + (node2.padding ?? 0) - (bbox.x - (bbox.left ?? 0))},${-h2 / 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 { shapeSvg, bbox } = await labelHelper(parent4, node2, getNodeClasses(node2)); const minWidth = 100; const minHeight = 50; const baseWidth = Math.max(bbox.width + (node2.padding ?? 0) * 2, node2?.width ?? 0); const baseHeight = Math.max(bbox.height + (node2.padding ?? 0) * 2, node2?.height ?? 0); const aspectRatio = baseWidth / baseHeight; let w3 = baseWidth; let h2 = baseHeight; if (w3 > h2 * aspectRatio) { h2 = w3 / aspectRatio; } else { w3 = h2 * aspectRatio; } w3 = Math.max(w3, minWidth); h2 = Math.max(h2, minHeight); const waveAmplitude = Math.min(h2 * 0.2, h2 / 4); const finalH = h2 + waveAmplitude * 2; const { cssStyles } = node2; const rc = at.svg(shapeSvg); const options3 = userNodeOverrides(node2, {}); if (node2.look !== "handDrawn") { options3.roughness = 0; options3.fillStyle = "solid"; } const points = [ { x: -w3 / 2, y: finalH / 2 }, ...generateFullSineWavePoints(-w3 / 2, finalH / 2, w3 / 2, finalH / 2, waveAmplitude, 1), { x: w3 / 2, y: -finalH / 2 }, ...generateFullSineWavePoints(w3 / 2, -finalH / 2, -w3 / 2, -finalH / 2, waveAmplitude, -1) ]; const waveRectPath = createPathFromPoints(points); const waveRectNode = rc.path(waveRectPath, options3); 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 { shapeSvg, bbox, label } = await labelHelper(parent4, node2, getNodeClasses(node2)); const w3 = Math.max(bbox.width + (node2.padding ?? 0) * 2, node2?.width ?? 0); const h2 = Math.max(bbox.height + (node2.padding ?? 0) * 2, node2?.height ?? 0); const rectOffset = 5; const x5 = -w3 / 2; const y5 = -h2 / 2; const { cssStyles } = node2; const rc = at.svg(shapeSvg); const options3 = userNodeOverrides(node2, {}); const outerPathPoints = [ { x: x5 - rectOffset, y: y5 - rectOffset }, { x: x5 - rectOffset, y: y5 + h2 }, { x: x5 + w3, y: y5 + h2 }, { x: x5 + w3, y: y5 - rectOffset } ]; const path4 = `M${x5 - rectOffset},${y5 - rectOffset} L${x5 + w3},${y5 - rectOffset} L${x5 + w3},${y5 + h2} L${x5 - rectOffset},${y5 + h2} L${x5 - rectOffset},${y5 - rectOffset} M${x5 - rectOffset},${y5} L${x5 + w3},${y5} M${x5},${y5 - rectOffset} L${x5},${y5 + h2}`; if (node2.look !== "handDrawn") { options3.roughness = 0; options3.fillStyle = "solid"; } const no = rc.path(path4, options3); const windowPane2 = shapeSvg.insert(() => no, ":first-child"); windowPane2.attr("transform", `translate(${rectOffset / 2}, ${rectOffset / 2})`); windowPane2.attr("class", "basic label-container"); 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 init_windowPane = __esm({ "src/rendering-util/rendering-elements/shapes/windowPane.ts"() { "use strict"; init_util(); init_handDrawnShapeStyles(); init_rough_esm(); init_intersect(); __name(windowPane, "windowPane"); } }); // src/diagrams/class/shapeUtil.ts async function textHelper(parent4, node2, config6, useHtmlLabels, GAP = config6.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 addText(annotationGroup, { text: `\xAB${annotation}\xBB` }, 0); const annotationGroupBBox = annotationGroup.node().getBBox(); annotationGroupHeight = annotationGroupBBox.height; } labelGroup = shapeSvg.insert("g").attr("class", "label-group text"); await addText(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 addText(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 addText(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 addText(parentGroup, node2, yOffset, styles3 = []) { const textEl = parentGroup.insert("g").attr("class", "label").attr("style", styles3.join("; ")); const config6 = getConfig(); let useHtmlLabels = "useHtmlLabels" in node2 ? node2.useHtmlLabels : evaluate(config6.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 text3 = await createText( textEl, sanitizeText3(decodeEntities(textContent)), { width: calculateTextWidth(textContent, config6) + 50, // Add room for error when splitting text into multiple lines classes: "markdown-node-label", useHtmlLabels }, config6 ); let bbox; let numberOfLines = 1; if (!useHtmlLabels) { if (styles3.includes("font-weight: bolder")) { select_default2(text3).selectAll("tspan").attr("font-weight", ""); } numberOfLines = text3.children.length; const textChild = text3.children[0]; if (text3.textContent === "" || text3.textContent.includes(">")) { textChild.textContent = textContent[0] + textContent.substring(1).replaceAll(">", ">").replaceAll("<", "<").trim(); const preserveSpace = textContent[1] === " "; if (preserveSpace) { textChild.textContent = textChild.textContent[0] + " " + textChild.textContent.substring(1); } } if (textChild.textContent === "undefined") { textChild.textContent = ""; } bbox = text3.getBBox(); } else { const div = text3.children[0]; const dv = select_default2(text3); numberOfLines = div.innerHTML.split("
    ").length; if (div.innerHTML.includes("")) { numberOfLines += div.innerHTML.split("").length - 1; } const images = div.getElementsByTagName("img"); if (images) { const noImgText = textContent.replace(/]*>/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 = config6.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(addText, "addText"); } }); // src/rendering-util/rendering-elements/shapes/classBox.ts async function classBox(parent4, node2) { const config6 = getConfig2(); const PADDING = config6.class.padding ?? 12; const GAP = PADDING; const useHtmlLabels = node2.useHtmlLabels ?? evaluate(config6.htmlLabels) ?? true; const classNode = node2; classNode.annotations = classNode.annotations ?? []; classNode.members = classNode.members ?? []; classNode.methods = classNode.methods ?? []; const { shapeSvg, bbox } = await textHelper(parent4, node2, config6, useHtmlLabels, GAP); const { labelStyles, nodeStyles } = styles2String(node2); node2.labelStyle = labelStyles; node2.cssStyles = classNode.styles || ""; const styles3 = classNode.styles?.join(";") || nodeStyles || ""; if (!node2.cssStyles) { node2.cssStyles = styles3.replaceAll("!important", "").split(";"); } const renderExtraBox = classNode.members.length === 0 && classNode.methods.length === 0 && !config6.class?.hideEmptyMembersBox; const rc = at.svg(shapeSvg); const options3 = userNodeOverrides(node2, {}); if (node2.look !== "handDrawn") { options3.roughness = 0; options3.fillStyle = "solid"; } const w3 = bbox.width; let h2 = bbox.height; if (classNode.members.length === 0 && classNode.methods.length === 0) { h2 += GAP; } else if (classNode.members.length > 0 && classNode.methods.length === 0) { h2 += GAP * 2; } const x5 = -w3 / 2; const y5 = -h2 / 2; const roughRect = rc.rectangle( x5 - PADDING, y5 - PADDING - (renderExtraBox ? PADDING : classNode.members.length === 0 && classNode.methods.length === 0 ? -PADDING / 2 : 0), w3 + 2 * PADDING, h2 + 2 * PADDING + (renderExtraBox ? PADDING * 2 : classNode.members.length === 0 && classNode.methods.length === 0 ? -PADDING : 0), options3 ); const rect3 = shapeSvg.insert(() => roughRect, ":first-child"); rect3.attr("class", "basic label-container"); const rectBBox = rect3.node().getBBox(); shapeSvg.selectAll(".text").each((_2, i2, nodes7) => { const text3 = select_default2(nodes7[i2]); const transform8 = text3.attr("transform"); let translateY2 = 0; if (transform8) { const regex2 = RegExp(/translate\(([^,]+),([^)]+)\)/); const translate = regex2.exec(transform8); if (translate) { translateY2 = parseFloat(translate[2]); } } let newTranslateY = translateY2 + y5 + PADDING - (renderExtraBox ? PADDING : classNode.members.length === 0 && classNode.methods.length === 0 ? -PADDING / 2 : 0); if (!useHtmlLabels) { newTranslateY -= 4; } let newTranslateX = x5; if (text3.attr("class").includes("label-group") || text3.attr("class").includes("annotation-group")) { newTranslateX = -text3.node()?.getBBox().width / 2 || 0; shapeSvg.selectAll("text").each(function(_3, i3, nodes8) { if (window.getComputedStyle(nodes8[i3]).textAnchor === "middle") { newTranslateX = 0; } }); } text3.attr("transform", `translate(${newTranslateX}, ${newTranslateY})`); }); 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; if (classNode.members.length > 0 || classNode.methods.length > 0 || renderExtraBox) { const roughLine = rc.line( rectBBox.x, annotationGroupHeight + labelGroupHeight + y5 + PADDING, rectBBox.x + rectBBox.width, annotationGroupHeight + labelGroupHeight + y5 + PADDING, options3 ); const line2 = shapeSvg.insert(() => roughLine); line2.attr("class", "divider").attr("style", styles3); } if (renderExtraBox || classNode.members.length > 0 || classNode.methods.length > 0) { const roughLine = rc.line( rectBBox.x, annotationGroupHeight + labelGroupHeight + membersGroupHeight + y5 + GAP * 2 + PADDING, rectBBox.x + rectBBox.width, annotationGroupHeight + labelGroupHeight + membersGroupHeight + y5 + PADDING + GAP * 2, options3 ); const line2 = shapeSvg.insert(() => roughLine); line2.attr("class", "divider").attr("style", styles3); } if (classNode.look !== "handDrawn") { shapeSvg.selectAll("path").attr("style", styles3); } rect3.select(":nth-child(2)").attr("style", styles3); shapeSvg.selectAll(".divider").select("path").attr("style", styles3); if (node2.labelStyle) { shapeSvg.selectAll("span").attr("style", node2.labelStyle); } else { shapeSvg.selectAll("span").attr("style", styles3); } if (!useHtmlLabels) { const colorRegex = RegExp(/color\s*:\s*([^;]*)/); const match2 = colorRegex.exec(styles3); if (match2) { const colorStyle = match2[0].replace("color", "fill"); shapeSvg.selectAll("tspan").attr("style", colorStyle); } else if (labelStyles) { const match3 = colorRegex.exec(labelStyles); if (match3) { const colorStyle = match3[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/kanbanItem.ts async function kanbanItem(parent4, kanbanNode, { config: config6 }) { 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 padding2 = kanbanNode.padding || 10; let ticketUrl = ""; let link3; if ("ticket" in kanbanNode && kanbanNode.ticket && config6?.kanban?.ticketBaseUrl) { ticketUrl = config6?.kanban?.ticketBaseUrl.replace("#TICKET#", kanbanNode.ticket); link3 = shapeSvg.insert("svg:a", ":first-child").attr("class", "kanban-ticket-link").attr("xlink:href", ticketUrl).attr("target", "_blank"); } const options3 = { useHtmlLabels: kanbanNode.useHtmlLabels, labelStyle: kanbanNode.labelStyle || "", width: kanbanNode.width, img: kanbanNode.img, padding: kanbanNode.padding || 8, centerLabel: false }; let labelEl, bbox2; if (link3) { ({ label: labelEl, bbox: bbox2 } = await insertLabel( link3, "ticket" in kanbanNode && kanbanNode.ticket || "", options3 )); } else { ({ label: labelEl, bbox: bbox2 } = await insertLabel( shapeSvg, "ticket" in kanbanNode && kanbanNode.ticket || "", options3 )); } const { label: labelElAssigned, bbox: bboxAssigned } = await insertLabel( shapeSvg, "assigned" in kanbanNode && kanbanNode.assigned || "", options3 ); 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 y5 = -totalHeight / 2; labelElTitle.attr( "transform", "translate(" + (padding2 - totalWidth / 2) + ", " + (-heightAdj - bbox.height / 2) + ")" ); labelEl.attr( "transform", "translate(" + (padding2 - totalWidth / 2) + ", " + (-heightAdj + bbox.height / 2) + ")" ); labelElAssigned.attr( "transform", "translate(" + (padding2 + 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 options4 = userNodeOverrides(kanbanNode, {}); const roughNode = rx || ry ? rc.path(createRoundedRectPathD(x5, y5, totalWidth, totalHeight, rx || 0), options4) : rc.rectangle(x5, y5, totalWidth, totalHeight, options4); 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", y5).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 = y5 + Math.floor((rx ?? 0) / 2); const y22 = y5 + 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; case "Low": return "blue"; case "Very Low": return "lightblue"; } }, "colorFromPriority"); __name(kanbanItem, "kanbanItem"); } }); // 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_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_classBox(); init_kanbanItem(); 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: "Start", name: "Circle", shortName: "circle", description: "Starting point", aliases: ["circ"], handler: circle }, { 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: text2 }, { 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, // class diagram classBox }; const entries = [ ...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(entries); }, "generateShapeMap"); shapes = generateShapeMap(); __name(isValidShape, "isValidShape"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/js-yaml/dist/js-yaml.mjs function isNothing(subject) { return typeof subject === "undefined" || subject === null; } function isObject2(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, count) { var result = "", cycle; for (cycle = 0; cycle < count; 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, options3) { options3 = Object.create(options3 || null); if (!mark.buffer) return null; if (!options3.maxLength) options3.maxLength = 79; if (typeof options3.indent !== "number") options3.indent = 1; if (typeof options3.linesBefore !== "number") options3.linesBefore = 3; if (typeof options3.linesAfter !== "number") options3.linesAfter = 2; var re2 = /\r?\n|\r|\0/g; var lineStarts = [0]; var lineEnds = []; var match2; var foundLineNo = -1; while (match2 = re2.exec(mark.buffer)) { lineEnds.push(match2.index); lineStarts.push(match2.index + match2[0].length); if (mark.position <= match2.index && foundLineNo < 0) { foundLineNo = lineStarts.length - 2; } } if (foundLineNo < 0) foundLineNo = lineStarts.length - 1; var result = "", i2, line2; var lineNoLength = Math.min(mark.line + options3.linesAfter, lineEnds.length).toString().length; var maxLineLength = options3.maxLength - (options3.indent + lineNoLength + 3); for (i2 = 1; i2 <= options3.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(" ", options3.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(" ", options3.indent) + padStart((mark.line + 1).toString(), lineNoLength) + " | " + line2.str + "\n"; result += common.repeat("-", options3.indent + lineNoLength + 3 + line2.pos) + "^\n"; for (i2 = 1; i2 <= options3.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(" ", options3.indent) + padStart((mark.line + i2 + 1).toString(), lineNoLength) + " | " + line2.str + "\n"; } return result.replace(/\n$/, ""); } function compileStyleAliases(map5) { var result = {}; if (map5 !== null) { Object.keys(map5).forEach(function(style3) { map5[style3].forEach(function(alias) { result[String(alias)] = style3; }); }); } return result; } function Type$1(tag2, options3) { options3 = options3 || {}; Object.keys(options3).forEach(function(name) { if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) { throw new exception('Unknown option "' + name + '" is met in definition of "' + tag2 + '" YAML type.'); } }); this.options = options3; this.tag = tag2; this.kind = options3["kind"] || null; this.resolve = options3["resolve"] || function() { return true; }; this.construct = options3["construct"] || function(data5) { return data5; }; this.instanceOf = options3["instanceOf"] || null; this.predicate = options3["predicate"] || null; this.represent = options3["represent"] || null; this.representName = options3["representName"] || null; this.defaultStyle = options3["defaultStyle"] || null; this.multi = options3["multi"] || false; this.styleAliases = compileStyleAliases(options3["styleAliases"] || null); if (YAML_NODE_KINDS.indexOf(this.kind) === -1) { throw new exception('Unknown kind "' + this.kind + '" is specified for "' + tag2 + '" 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(data5) { if (data5 === null) return true; var max10 = data5.length; return max10 === 1 && data5 === "~" || max10 === 4 && (data5 === "null" || data5 === "Null" || data5 === "NULL"); } function constructYamlNull() { return null; } function isNull(object3) { return object3 === null; } function resolveYamlBoolean(data5) { if (data5 === null) return false; var max10 = data5.length; return max10 === 4 && (data5 === "true" || data5 === "True" || data5 === "TRUE") || max10 === 5 && (data5 === "false" || data5 === "False" || data5 === "FALSE"); } function constructYamlBoolean(data5) { return data5 === "true" || data5 === "True" || data5 === "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(data5) { if (data5 === null) return false; var max10 = data5.length, index = 0, hasDigits = false, ch; if (!max10) return false; ch = data5[index]; if (ch === "-" || ch === "+") { ch = data5[++index]; } if (ch === "0") { if (index + 1 === max10) return true; ch = data5[++index]; if (ch === "b") { index++; for (; index < max10; index++) { ch = data5[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 = data5[index]; if (ch === "_") continue; if (!isHexCode(data5.charCodeAt(index))) return false; hasDigits = true; } return hasDigits && ch !== "_"; } if (ch === "o") { index++; for (; index < max10; index++) { ch = data5[index]; if (ch === "_") continue; if (!isOctCode(data5.charCodeAt(index))) return false; hasDigits = true; } return hasDigits && ch !== "_"; } } if (ch === "_") return false; for (; index < max10; index++) { ch = data5[index]; if (ch === "_") continue; if (!isDecCode(data5.charCodeAt(index))) { return false; } hasDigits = true; } if (!hasDigits || ch === "_") return false; return true; } function constructYamlInteger(data5) { var value2 = data5, 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(data5) { if (data5 === null) return false; if (!YAML_FLOAT_PATTERN.test(data5) || // Quick hack to not allow integers end with `_` // Probably should update regexp & check speed data5[data5.length - 1] === "_") { return false; } return true; } function constructYamlFloat(data5) { var value2, sign2; value2 = data5.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(data5) { if (data5 === null) return false; if (YAML_DATE_REGEXP.exec(data5) !== null) return true; if (YAML_TIMESTAMP_REGEXP.exec(data5) !== null) return true; return false; } function constructYamlTimestamp(data5) { var match2, year, month, day, hour, minute, second2, fraction = 0, delta = null, tz_hour, tz_minute, date2; match2 = YAML_DATE_REGEXP.exec(data5); if (match2 === null) match2 = YAML_TIMESTAMP_REGEXP.exec(data5); if (match2 === null) throw new Error("Date resolve error"); year = +match2[1]; month = +match2[2] - 1; day = +match2[3]; if (!match2[4]) { return new Date(Date.UTC(year, month, day)); } hour = +match2[4]; minute = +match2[5]; second2 = +match2[6]; if (match2[7]) { fraction = match2[7].slice(0, 3); while (fraction.length < 3) { fraction += "0"; } fraction = +fraction; } if (match2[9]) { tz_hour = +match2[10]; tz_minute = +(match2[11] || 0); delta = (tz_hour * 60 + tz_minute) * 6e4; if (match2[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(data5) { return data5 === "<<" || data5 === null; } function resolveYamlBinary(data5) { if (data5 === null) return false; var code, idx, bitlen = 0, max10 = data5.length, map5 = BASE64_MAP; for (idx = 0; idx < max10; idx++) { code = map5.indexOf(data5.charAt(idx)); if (code > 64) continue; if (code < 0) return false; bitlen += 6; } return bitlen % 8 === 0; } function constructYamlBinary(data5) { var idx, tailbits, input = data5.replace(/[\r\n=]/g, ""), max10 = input.length, map5 = 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 | map5.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, map5 = BASE64_MAP; for (idx = 0; idx < max10; idx++) { if (idx % 3 === 0 && idx) { result += map5[bits >> 18 & 63]; result += map5[bits >> 12 & 63]; result += map5[bits >> 6 & 63]; result += map5[bits & 63]; } bits = (bits << 8) + object3[idx]; } tail = max10 % 3; if (tail === 0) { result += map5[bits >> 18 & 63]; result += map5[bits >> 12 & 63]; result += map5[bits >> 6 & 63]; result += map5[bits & 63]; } else if (tail === 2) { result += map5[bits >> 10 & 63]; result += map5[bits >> 4 & 63]; result += map5[bits << 2 & 63]; result += map5[64]; } else if (tail === 1) { result += map5[bits >> 2 & 63]; result += map5[bits << 4 & 63]; result += map5[64]; result += map5[64]; } return result; } function isBinary(obj) { return Object.prototype.toString.call(obj) === "[object Uint8Array]"; } function resolveYamlOmap(data5) { if (data5 === null) return true; var objectKeys = [], index, length2, pair, pairKey, pairHasKey, object3 = data5; 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 (pairKey in pair) { if (_hasOwnProperty$3.call(pair, pairKey)) { if (!pairHasKey) pairHasKey = true; else return false; } } if (!pairHasKey) return false; if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey); else return false; } return true; } function constructYamlOmap(data5) { return data5 !== null ? data5 : []; } function resolveYamlPairs(data5) { if (data5 === null) return true; var index, length2, pair, keys3, result, object3 = data5; 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(data5) { if (data5 === null) return []; var index, length2, pair, keys3, result, object3 = data5; 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(data5) { if (data5 === null) return true; var key, object3 = data5; for (key in object3) { if (_hasOwnProperty$2.call(object3, key)) { if (object3[key] !== null) return false; } } return true; } function constructYamlSet(data5) { return data5 !== null ? data5 : {}; } 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 State$1(input, options3) { this.input = input; this.filename = options3["filename"] || null; this.schema = options3["schema"] || _default; this.onWarning = options3["onWarning"] || null; this.legacy = options3["legacy"] || false; this.json = options3["json"] || false; this.listener = options3["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(state5, message) { var mark = { name: state5.filename, buffer: state5.input.slice(0, -1), // omit trailing \0 position: state5.position, line: state5.line, column: state5.position - state5.lineStart }; mark.snippet = snippet(mark); return new exception(message, mark); } function throwError(state5, message) { throw generateError(state5, message); } function throwWarning(state5, message) { if (state5.onWarning) { state5.onWarning.call(null, generateError(state5, message)); } } function captureSegment(state5, start3, end2, checkJson) { var _position, _length, _character, _result; if (start3 < end2) { _result = state5.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(state5, "expected valid JSON character"); } } } else if (PATTERN_NON_PRINTABLE.test(_result)) { throwError(state5, "the stream contains non-printable characters"); } state5.result += _result; } } function mergeMappings(state5, destination, source, overridableKeys) { var sourceKeys, key, index, quantity; if (!common.isObject(source)) { throwError(state5, "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)) { destination[key] = source[key]; overridableKeys[key] = true; } } } function storeMappingPair(state5, _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(state5, "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(state5, _result, valueNode[index], overridableKeys); } } else { mergeMappings(state5, _result, valueNode, overridableKeys); } } else { if (!state5.json && !_hasOwnProperty$1.call(overridableKeys, keyNode) && _hasOwnProperty$1.call(_result, keyNode)) { state5.line = startLine || state5.line; state5.lineStart = startLineStart || state5.lineStart; state5.position = startPos || state5.position; throwError(state5, "duplicated mapping key"); } if (keyNode === "__proto__") { Object.defineProperty(_result, keyNode, { configurable: true, enumerable: true, writable: true, value: valueNode }); } else { _result[keyNode] = valueNode; } delete overridableKeys[keyNode]; } return _result; } function readLineBreak(state5) { var ch; ch = state5.input.charCodeAt(state5.position); if (ch === 10) { state5.position++; } else if (ch === 13) { state5.position++; if (state5.input.charCodeAt(state5.position) === 10) { state5.position++; } } else { throwError(state5, "a line break is expected"); } state5.line += 1; state5.lineStart = state5.position; state5.firstTabInLine = -1; } function skipSeparationSpace(state5, allowComments, checkIndent) { var lineBreaks = 0, ch = state5.input.charCodeAt(state5.position); while (ch !== 0) { while (is_WHITE_SPACE(ch)) { if (ch === 9 && state5.firstTabInLine === -1) { state5.firstTabInLine = state5.position; } ch = state5.input.charCodeAt(++state5.position); } if (allowComments && ch === 35) { do { ch = state5.input.charCodeAt(++state5.position); } while (ch !== 10 && ch !== 13 && ch !== 0); } if (is_EOL(ch)) { readLineBreak(state5); ch = state5.input.charCodeAt(state5.position); lineBreaks++; state5.lineIndent = 0; while (ch === 32) { state5.lineIndent++; ch = state5.input.charCodeAt(++state5.position); } } else { break; } } if (checkIndent !== -1 && lineBreaks !== 0 && state5.lineIndent < checkIndent) { throwWarning(state5, "deficient indentation"); } return lineBreaks; } function testDocumentSeparator(state5) { var _position = state5.position, ch; ch = state5.input.charCodeAt(_position); if ((ch === 45 || ch === 46) && ch === state5.input.charCodeAt(_position + 1) && ch === state5.input.charCodeAt(_position + 2)) { _position += 3; ch = state5.input.charCodeAt(_position); if (ch === 0 || is_WS_OR_EOL(ch)) { return true; } } return false; } function writeFoldedLines(state5, count) { if (count === 1) { state5.result += " "; } else if (count > 1) { state5.result += common.repeat("\n", count - 1); } } function readPlainScalar(state5, nodeIndent, withinFlowCollection) { var preceding, following, captureStart, captureEnd, hasPendingContent, _line, _lineStart, _lineIndent, _kind = state5.kind, _result = state5.result, ch; ch = state5.input.charCodeAt(state5.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 = state5.input.charCodeAt(state5.position + 1); if (is_WS_OR_EOL(following) || withinFlowCollection && is_FLOW_INDICATOR(following)) { return false; } } state5.kind = "scalar"; state5.result = ""; captureStart = captureEnd = state5.position; hasPendingContent = false; while (ch !== 0) { if (ch === 58) { following = state5.input.charCodeAt(state5.position + 1); if (is_WS_OR_EOL(following) || withinFlowCollection && is_FLOW_INDICATOR(following)) { break; } } else if (ch === 35) { preceding = state5.input.charCodeAt(state5.position - 1); if (is_WS_OR_EOL(preceding)) { break; } } else if (state5.position === state5.lineStart && testDocumentSeparator(state5) || withinFlowCollection && is_FLOW_INDICATOR(ch)) { break; } else if (is_EOL(ch)) { _line = state5.line; _lineStart = state5.lineStart; _lineIndent = state5.lineIndent; skipSeparationSpace(state5, false, -1); if (state5.lineIndent >= nodeIndent) { hasPendingContent = true; ch = state5.input.charCodeAt(state5.position); continue; } else { state5.position = captureEnd; state5.line = _line; state5.lineStart = _lineStart; state5.lineIndent = _lineIndent; break; } } if (hasPendingContent) { captureSegment(state5, captureStart, captureEnd, false); writeFoldedLines(state5, state5.line - _line); captureStart = captureEnd = state5.position; hasPendingContent = false; } if (!is_WHITE_SPACE(ch)) { captureEnd = state5.position + 1; } ch = state5.input.charCodeAt(++state5.position); } captureSegment(state5, captureStart, captureEnd, false); if (state5.result) { return true; } state5.kind = _kind; state5.result = _result; return false; } function readSingleQuotedScalar(state5, nodeIndent) { var ch, captureStart, captureEnd; ch = state5.input.charCodeAt(state5.position); if (ch !== 39) { return false; } state5.kind = "scalar"; state5.result = ""; state5.position++; captureStart = captureEnd = state5.position; while ((ch = state5.input.charCodeAt(state5.position)) !== 0) { if (ch === 39) { captureSegment(state5, captureStart, state5.position, true); ch = state5.input.charCodeAt(++state5.position); if (ch === 39) { captureStart = state5.position; state5.position++; captureEnd = state5.position; } else { return true; } } else if (is_EOL(ch)) { captureSegment(state5, captureStart, captureEnd, true); writeFoldedLines(state5, skipSeparationSpace(state5, false, nodeIndent)); captureStart = captureEnd = state5.position; } else if (state5.position === state5.lineStart && testDocumentSeparator(state5)) { throwError(state5, "unexpected end of the document within a single quoted scalar"); } else { state5.position++; captureEnd = state5.position; } } throwError(state5, "unexpected end of the stream within a single quoted scalar"); } function readDoubleQuotedScalar(state5, nodeIndent) { var captureStart, captureEnd, hexLength, hexResult, tmp, ch; ch = state5.input.charCodeAt(state5.position); if (ch !== 34) { return false; } state5.kind = "scalar"; state5.result = ""; state5.position++; captureStart = captureEnd = state5.position; while ((ch = state5.input.charCodeAt(state5.position)) !== 0) { if (ch === 34) { captureSegment(state5, captureStart, state5.position, true); state5.position++; return true; } else if (ch === 92) { captureSegment(state5, captureStart, state5.position, true); ch = state5.input.charCodeAt(++state5.position); if (is_EOL(ch)) { skipSeparationSpace(state5, false, nodeIndent); } else if (ch < 256 && simpleEscapeCheck[ch]) { state5.result += simpleEscapeMap[ch]; state5.position++; } else if ((tmp = escapedHexLen(ch)) > 0) { hexLength = tmp; hexResult = 0; for (; hexLength > 0; hexLength--) { ch = state5.input.charCodeAt(++state5.position); if ((tmp = fromHexCode(ch)) >= 0) { hexResult = (hexResult << 4) + tmp; } else { throwError(state5, "expected hexadecimal character"); } } state5.result += charFromCodepoint(hexResult); state5.position++; } else { throwError(state5, "unknown escape sequence"); } captureStart = captureEnd = state5.position; } else if (is_EOL(ch)) { captureSegment(state5, captureStart, captureEnd, true); writeFoldedLines(state5, skipSeparationSpace(state5, false, nodeIndent)); captureStart = captureEnd = state5.position; } else if (state5.position === state5.lineStart && testDocumentSeparator(state5)) { throwError(state5, "unexpected end of the document within a double quoted scalar"); } else { state5.position++; captureEnd = state5.position; } } throwError(state5, "unexpected end of the stream within a double quoted scalar"); } function readFlowCollection(state5, nodeIndent) { var readNext = true, _line, _lineStart, _pos, _tag2 = state5.tag, _result, _anchor = state5.anchor, following, terminator, isPair, isExplicitPair, isMapping, overridableKeys = /* @__PURE__ */ Object.create(null), keyNode, keyTag, valueNode, ch; ch = state5.input.charCodeAt(state5.position); if (ch === 91) { terminator = 93; isMapping = false; _result = []; } else if (ch === 123) { terminator = 125; isMapping = true; _result = {}; } else { return false; } if (state5.anchor !== null) { state5.anchorMap[state5.anchor] = _result; } ch = state5.input.charCodeAt(++state5.position); while (ch !== 0) { skipSeparationSpace(state5, true, nodeIndent); ch = state5.input.charCodeAt(state5.position); if (ch === terminator) { state5.position++; state5.tag = _tag2; state5.anchor = _anchor; state5.kind = isMapping ? "mapping" : "sequence"; state5.result = _result; return true; } else if (!readNext) { throwError(state5, "missed comma between flow collection entries"); } else if (ch === 44) { throwError(state5, "expected the node content, but found ','"); } keyTag = keyNode = valueNode = null; isPair = isExplicitPair = false; if (ch === 63) { following = state5.input.charCodeAt(state5.position + 1); if (is_WS_OR_EOL(following)) { isPair = isExplicitPair = true; state5.position++; skipSeparationSpace(state5, true, nodeIndent); } } _line = state5.line; _lineStart = state5.lineStart; _pos = state5.position; composeNode(state5, nodeIndent, CONTEXT_FLOW_IN, false, true); keyTag = state5.tag; keyNode = state5.result; skipSeparationSpace(state5, true, nodeIndent); ch = state5.input.charCodeAt(state5.position); if ((isExplicitPair || state5.line === _line) && ch === 58) { isPair = true; ch = state5.input.charCodeAt(++state5.position); skipSeparationSpace(state5, true, nodeIndent); composeNode(state5, nodeIndent, CONTEXT_FLOW_IN, false, true); valueNode = state5.result; } if (isMapping) { storeMappingPair(state5, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos); } else if (isPair) { _result.push(storeMappingPair(state5, null, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos)); } else { _result.push(keyNode); } skipSeparationSpace(state5, true, nodeIndent); ch = state5.input.charCodeAt(state5.position); if (ch === 44) { readNext = true; ch = state5.input.charCodeAt(++state5.position); } else { readNext = false; } } throwError(state5, "unexpected end of the stream within a flow collection"); } function readBlockScalar(state5, nodeIndent) { var captureStart, folding, chomping = CHOMPING_CLIP, didReadContent = false, detectedIndent = false, textIndent = nodeIndent, emptyLines = 0, atMoreIndented = false, tmp, ch; ch = state5.input.charCodeAt(state5.position); if (ch === 124) { folding = false; } else if (ch === 62) { folding = true; } else { return false; } state5.kind = "scalar"; state5.result = ""; while (ch !== 0) { ch = state5.input.charCodeAt(++state5.position); if (ch === 43 || ch === 45) { if (CHOMPING_CLIP === chomping) { chomping = ch === 43 ? CHOMPING_KEEP : CHOMPING_STRIP; } else { throwError(state5, "repeat of a chomping mode identifier"); } } else if ((tmp = fromDecimalCode(ch)) >= 0) { if (tmp === 0) { throwError(state5, "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(state5, "repeat of an indentation width identifier"); } } else { break; } } if (is_WHITE_SPACE(ch)) { do { ch = state5.input.charCodeAt(++state5.position); } while (is_WHITE_SPACE(ch)); if (ch === 35) { do { ch = state5.input.charCodeAt(++state5.position); } while (!is_EOL(ch) && ch !== 0); } } while (ch !== 0) { readLineBreak(state5); state5.lineIndent = 0; ch = state5.input.charCodeAt(state5.position); while ((!detectedIndent || state5.lineIndent < textIndent) && ch === 32) { state5.lineIndent++; ch = state5.input.charCodeAt(++state5.position); } if (!detectedIndent && state5.lineIndent > textIndent) { textIndent = state5.lineIndent; } if (is_EOL(ch)) { emptyLines++; continue; } if (state5.lineIndent < textIndent) { if (chomping === CHOMPING_KEEP) { state5.result += common.repeat("\n", didReadContent ? 1 + emptyLines : emptyLines); } else if (chomping === CHOMPING_CLIP) { if (didReadContent) { state5.result += "\n"; } } break; } if (folding) { if (is_WHITE_SPACE(ch)) { atMoreIndented = true; state5.result += common.repeat("\n", didReadContent ? 1 + emptyLines : emptyLines); } else if (atMoreIndented) { atMoreIndented = false; state5.result += common.repeat("\n", emptyLines + 1); } else if (emptyLines === 0) { if (didReadContent) { state5.result += " "; } } else { state5.result += common.repeat("\n", emptyLines); } } else { state5.result += common.repeat("\n", didReadContent ? 1 + emptyLines : emptyLines); } didReadContent = true; detectedIndent = true; emptyLines = 0; captureStart = state5.position; while (!is_EOL(ch) && ch !== 0) { ch = state5.input.charCodeAt(++state5.position); } captureSegment(state5, captureStart, state5.position, false); } return true; } function readBlockSequence(state5, nodeIndent) { var _line, _tag2 = state5.tag, _anchor = state5.anchor, _result = [], following, detected = false, ch; if (state5.firstTabInLine !== -1) return false; if (state5.anchor !== null) { state5.anchorMap[state5.anchor] = _result; } ch = state5.input.charCodeAt(state5.position); while (ch !== 0) { if (state5.firstTabInLine !== -1) { state5.position = state5.firstTabInLine; throwError(state5, "tab characters must not be used in indentation"); } if (ch !== 45) { break; } following = state5.input.charCodeAt(state5.position + 1); if (!is_WS_OR_EOL(following)) { break; } detected = true; state5.position++; if (skipSeparationSpace(state5, true, -1)) { if (state5.lineIndent <= nodeIndent) { _result.push(null); ch = state5.input.charCodeAt(state5.position); continue; } } _line = state5.line; composeNode(state5, nodeIndent, CONTEXT_BLOCK_IN, false, true); _result.push(state5.result); skipSeparationSpace(state5, true, -1); ch = state5.input.charCodeAt(state5.position); if ((state5.line === _line || state5.lineIndent > nodeIndent) && ch !== 0) { throwError(state5, "bad indentation of a sequence entry"); } else if (state5.lineIndent < nodeIndent) { break; } } if (detected) { state5.tag = _tag2; state5.anchor = _anchor; state5.kind = "sequence"; state5.result = _result; return true; } return false; } function readBlockMapping(state5, nodeIndent, flowIndent) { var following, allowCompact, _line, _keyLine, _keyLineStart, _keyPos, _tag2 = state5.tag, _anchor = state5.anchor, _result = {}, overridableKeys = /* @__PURE__ */ Object.create(null), keyTag = null, keyNode = null, valueNode = null, atExplicitKey = false, detected = false, ch; if (state5.firstTabInLine !== -1) return false; if (state5.anchor !== null) { state5.anchorMap[state5.anchor] = _result; } ch = state5.input.charCodeAt(state5.position); while (ch !== 0) { if (!atExplicitKey && state5.firstTabInLine !== -1) { state5.position = state5.firstTabInLine; throwError(state5, "tab characters must not be used in indentation"); } following = state5.input.charCodeAt(state5.position + 1); _line = state5.line; if ((ch === 63 || ch === 58) && is_WS_OR_EOL(following)) { if (ch === 63) { if (atExplicitKey) { storeMappingPair(state5, _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(state5, "incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line"); } state5.position += 1; ch = following; } else { _keyLine = state5.line; _keyLineStart = state5.lineStart; _keyPos = state5.position; if (!composeNode(state5, flowIndent, CONTEXT_FLOW_OUT, false, true)) { break; } if (state5.line === _line) { ch = state5.input.charCodeAt(state5.position); while (is_WHITE_SPACE(ch)) { ch = state5.input.charCodeAt(++state5.position); } if (ch === 58) { ch = state5.input.charCodeAt(++state5.position); if (!is_WS_OR_EOL(ch)) { throwError(state5, "a whitespace character is expected after the key-value separator within a block mapping"); } if (atExplicitKey) { storeMappingPair(state5, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos); keyTag = keyNode = valueNode = null; } detected = true; atExplicitKey = false; allowCompact = false; keyTag = state5.tag; keyNode = state5.result; } else if (detected) { throwError(state5, "can not read an implicit mapping pair; a colon is missed"); } else { state5.tag = _tag2; state5.anchor = _anchor; return true; } } else if (detected) { throwError(state5, "can not read a block mapping entry; a multiline key may not be an implicit key"); } else { state5.tag = _tag2; state5.anchor = _anchor; return true; } } if (state5.line === _line || state5.lineIndent > nodeIndent) { if (atExplicitKey) { _keyLine = state5.line; _keyLineStart = state5.lineStart; _keyPos = state5.position; } if (composeNode(state5, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) { if (atExplicitKey) { keyNode = state5.result; } else { valueNode = state5.result; } } if (!atExplicitKey) { storeMappingPair(state5, _result, overridableKeys, keyTag, keyNode, valueNode, _keyLine, _keyLineStart, _keyPos); keyTag = keyNode = valueNode = null; } skipSeparationSpace(state5, true, -1); ch = state5.input.charCodeAt(state5.position); } if ((state5.line === _line || state5.lineIndent > nodeIndent) && ch !== 0) { throwError(state5, "bad indentation of a mapping entry"); } else if (state5.lineIndent < nodeIndent) { break; } } if (atExplicitKey) { storeMappingPair(state5, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos); } if (detected) { state5.tag = _tag2; state5.anchor = _anchor; state5.kind = "mapping"; state5.result = _result; } return detected; } function readTagProperty(state5) { var _position, isVerbatim = false, isNamed2 = false, tagHandle, tagName, ch; ch = state5.input.charCodeAt(state5.position); if (ch !== 33) return false; if (state5.tag !== null) { throwError(state5, "duplication of a tag property"); } ch = state5.input.charCodeAt(++state5.position); if (ch === 60) { isVerbatim = true; ch = state5.input.charCodeAt(++state5.position); } else if (ch === 33) { isNamed2 = true; tagHandle = "!!"; ch = state5.input.charCodeAt(++state5.position); } else { tagHandle = "!"; } _position = state5.position; if (isVerbatim) { do { ch = state5.input.charCodeAt(++state5.position); } while (ch !== 0 && ch !== 62); if (state5.position < state5.length) { tagName = state5.input.slice(_position, state5.position); ch = state5.input.charCodeAt(++state5.position); } else { throwError(state5, "unexpected end of the stream within a verbatim tag"); } } else { while (ch !== 0 && !is_WS_OR_EOL(ch)) { if (ch === 33) { if (!isNamed2) { tagHandle = state5.input.slice(_position - 1, state5.position + 1); if (!PATTERN_TAG_HANDLE.test(tagHandle)) { throwError(state5, "named tag handle cannot contain such characters"); } isNamed2 = true; _position = state5.position + 1; } else { throwError(state5, "tag suffix cannot contain exclamation marks"); } } ch = state5.input.charCodeAt(++state5.position); } tagName = state5.input.slice(_position, state5.position); if (PATTERN_FLOW_INDICATORS.test(tagName)) { throwError(state5, "tag suffix cannot contain flow indicator characters"); } } if (tagName && !PATTERN_TAG_URI.test(tagName)) { throwError(state5, "tag name cannot contain such characters: " + tagName); } try { tagName = decodeURIComponent(tagName); } catch (err) { throwError(state5, "tag name is malformed: " + tagName); } if (isVerbatim) { state5.tag = tagName; } else if (_hasOwnProperty$1.call(state5.tagMap, tagHandle)) { state5.tag = state5.tagMap[tagHandle] + tagName; } else if (tagHandle === "!") { state5.tag = "!" + tagName; } else if (tagHandle === "!!") { state5.tag = "tag:yaml.org,2002:" + tagName; } else { throwError(state5, 'undeclared tag handle "' + tagHandle + '"'); } return true; } function readAnchorProperty(state5) { var _position, ch; ch = state5.input.charCodeAt(state5.position); if (ch !== 38) return false; if (state5.anchor !== null) { throwError(state5, "duplication of an anchor property"); } ch = state5.input.charCodeAt(++state5.position); _position = state5.position; while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) { ch = state5.input.charCodeAt(++state5.position); } if (state5.position === _position) { throwError(state5, "name of an anchor node must contain at least one character"); } state5.anchor = state5.input.slice(_position, state5.position); return true; } function readAlias(state5) { var _position, alias, ch; ch = state5.input.charCodeAt(state5.position); if (ch !== 42) return false; ch = state5.input.charCodeAt(++state5.position); _position = state5.position; while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) { ch = state5.input.charCodeAt(++state5.position); } if (state5.position === _position) { throwError(state5, "name of an alias node must contain at least one character"); } alias = state5.input.slice(_position, state5.position); if (!_hasOwnProperty$1.call(state5.anchorMap, alias)) { throwError(state5, 'unidentified alias "' + alias + '"'); } state5.result = state5.anchorMap[alias]; skipSeparationSpace(state5, true, -1); return true; } function composeNode(state5, parentIndent, nodeContext, allowToSeek, allowCompact) { var allowBlockStyles, allowBlockScalars, allowBlockCollections, indentStatus = 1, atNewLine = false, hasContent = false, typeIndex, typeQuantity, typeList, type3, flowIndent, blockIndent; if (state5.listener !== null) { state5.listener("open", state5); } state5.tag = null; state5.anchor = null; state5.kind = null; state5.result = null; allowBlockStyles = allowBlockScalars = allowBlockCollections = CONTEXT_BLOCK_OUT === nodeContext || CONTEXT_BLOCK_IN === nodeContext; if (allowToSeek) { if (skipSeparationSpace(state5, true, -1)) { atNewLine = true; if (state5.lineIndent > parentIndent) { indentStatus = 1; } else if (state5.lineIndent === parentIndent) { indentStatus = 0; } else if (state5.lineIndent < parentIndent) { indentStatus = -1; } } } if (indentStatus === 1) { while (readTagProperty(state5) || readAnchorProperty(state5)) { if (skipSeparationSpace(state5, true, -1)) { atNewLine = true; allowBlockCollections = allowBlockStyles; if (state5.lineIndent > parentIndent) { indentStatus = 1; } else if (state5.lineIndent === parentIndent) { indentStatus = 0; } else if (state5.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 = state5.position - state5.lineStart; if (indentStatus === 1) { if (allowBlockCollections && (readBlockSequence(state5, blockIndent) || readBlockMapping(state5, blockIndent, flowIndent)) || readFlowCollection(state5, flowIndent)) { hasContent = true; } else { if (allowBlockScalars && readBlockScalar(state5, flowIndent) || readSingleQuotedScalar(state5, flowIndent) || readDoubleQuotedScalar(state5, flowIndent)) { hasContent = true; } else if (readAlias(state5)) { hasContent = true; if (state5.tag !== null || state5.anchor !== null) { throwError(state5, "alias node should not have any properties"); } } else if (readPlainScalar(state5, flowIndent, CONTEXT_FLOW_IN === nodeContext)) { hasContent = true; if (state5.tag === null) { state5.tag = "?"; } } if (state5.anchor !== null) { state5.anchorMap[state5.anchor] = state5.result; } } } else if (indentStatus === 0) { hasContent = allowBlockCollections && readBlockSequence(state5, blockIndent); } } if (state5.tag === null) { if (state5.anchor !== null) { state5.anchorMap[state5.anchor] = state5.result; } } else if (state5.tag === "?") { if (state5.result !== null && state5.kind !== "scalar") { throwError(state5, 'unacceptable node kind for ! tag; it should be "scalar", not "' + state5.kind + '"'); } for (typeIndex = 0, typeQuantity = state5.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) { type3 = state5.implicitTypes[typeIndex]; if (type3.resolve(state5.result)) { state5.result = type3.construct(state5.result); state5.tag = type3.tag; if (state5.anchor !== null) { state5.anchorMap[state5.anchor] = state5.result; } break; } } } else if (state5.tag !== "!") { if (_hasOwnProperty$1.call(state5.typeMap[state5.kind || "fallback"], state5.tag)) { type3 = state5.typeMap[state5.kind || "fallback"][state5.tag]; } else { type3 = null; typeList = state5.typeMap.multi[state5.kind || "fallback"]; for (typeIndex = 0, typeQuantity = typeList.length; typeIndex < typeQuantity; typeIndex += 1) { if (state5.tag.slice(0, typeList[typeIndex].tag.length) === typeList[typeIndex].tag) { type3 = typeList[typeIndex]; break; } } } if (!type3) { throwError(state5, "unknown tag !<" + state5.tag + ">"); } if (state5.result !== null && type3.kind !== state5.kind) { throwError(state5, "unacceptable node kind for !<" + state5.tag + '> tag; it should be "' + type3.kind + '", not "' + state5.kind + '"'); } if (!type3.resolve(state5.result, state5.tag)) { throwError(state5, "cannot resolve a node with !<" + state5.tag + "> explicit tag"); } else { state5.result = type3.construct(state5.result, state5.tag); if (state5.anchor !== null) { state5.anchorMap[state5.anchor] = state5.result; } } } if (state5.listener !== null) { state5.listener("close", state5); } return state5.tag !== null || state5.anchor !== null || hasContent; } function readDocument(state5) { var documentStart = state5.position, _position, directiveName, directiveArgs, hasDirectives = false, ch; state5.version = null; state5.checkLineBreaks = state5.legacy; state5.tagMap = /* @__PURE__ */ Object.create(null); state5.anchorMap = /* @__PURE__ */ Object.create(null); while ((ch = state5.input.charCodeAt(state5.position)) !== 0) { skipSeparationSpace(state5, true, -1); ch = state5.input.charCodeAt(state5.position); if (state5.lineIndent > 0 || ch !== 37) { break; } hasDirectives = true; ch = state5.input.charCodeAt(++state5.position); _position = state5.position; while (ch !== 0 && !is_WS_OR_EOL(ch)) { ch = state5.input.charCodeAt(++state5.position); } directiveName = state5.input.slice(_position, state5.position); directiveArgs = []; if (directiveName.length < 1) { throwError(state5, "directive name must not be less than one character in length"); } while (ch !== 0) { while (is_WHITE_SPACE(ch)) { ch = state5.input.charCodeAt(++state5.position); } if (ch === 35) { do { ch = state5.input.charCodeAt(++state5.position); } while (ch !== 0 && !is_EOL(ch)); break; } if (is_EOL(ch)) break; _position = state5.position; while (ch !== 0 && !is_WS_OR_EOL(ch)) { ch = state5.input.charCodeAt(++state5.position); } directiveArgs.push(state5.input.slice(_position, state5.position)); } if (ch !== 0) readLineBreak(state5); if (_hasOwnProperty$1.call(directiveHandlers, directiveName)) { directiveHandlers[directiveName](state5, directiveName, directiveArgs); } else { throwWarning(state5, 'unknown document directive "' + directiveName + '"'); } } skipSeparationSpace(state5, true, -1); if (state5.lineIndent === 0 && state5.input.charCodeAt(state5.position) === 45 && state5.input.charCodeAt(state5.position + 1) === 45 && state5.input.charCodeAt(state5.position + 2) === 45) { state5.position += 3; skipSeparationSpace(state5, true, -1); } else if (hasDirectives) { throwError(state5, "directives end mark is expected"); } composeNode(state5, state5.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true); skipSeparationSpace(state5, true, -1); if (state5.checkLineBreaks && PATTERN_NON_ASCII_LINE_BREAKS.test(state5.input.slice(documentStart, state5.position))) { throwWarning(state5, "non-ASCII line breaks are interpreted as content"); } state5.documents.push(state5.result); if (state5.position === state5.lineStart && testDocumentSeparator(state5)) { if (state5.input.charCodeAt(state5.position) === 46) { state5.position += 3; skipSeparationSpace(state5, true, -1); } return; } if (state5.position < state5.length - 1) { throwError(state5, "end of the stream or a document separator is expected"); } else { return; } } function loadDocuments(input, options3) { input = String(input); options3 = options3 || {}; 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 state5 = new State$1(input, options3); var nullpos = input.indexOf("\0"); if (nullpos !== -1) { state5.position = nullpos; throwError(state5, "null byte is not allowed in input"); } state5.input += "\0"; while (state5.input.charCodeAt(state5.position) === 32) { state5.lineIndent += 1; state5.position += 1; } while (state5.position < state5.length - 1) { readDocument(state5); } return state5.documents; } function loadAll$1(input, iterator, options3) { if (iterator !== null && typeof iterator === "object" && typeof options3 === "undefined") { options3 = iterator; iterator = null; } var documents2 = loadDocuments(input, options3); if (typeof iterator !== "function") { return documents2; } for (var index = 0, length2 = documents2.length; index < length2; index += 1) { iterator(documents2[index]); } } function load$1(input, options3) { var documents2 = loadDocuments(input, options3); if (documents2.length === 0) { return void 0; } else if (documents2.length === 1) { return documents2[0]; } throw new exception("expected a single document in the stream, but found more"); } function compileStyleMap(schema2, map5) { var result, keys3, index, length2, tag2, style3, type3; if (map5 === null) return {}; result = {}; keys3 = Object.keys(map5); for (index = 0, length2 = keys3.length; index < length2; index += 1) { tag2 = keys3[index]; style3 = String(map5[tag2]); if (tag2.slice(0, 2) === "!!") { tag2 = "tag:yaml.org,2002:" + tag2.slice(2); } type3 = schema2.compiledTypeMap["fallback"][tag2]; if (type3 && _hasOwnProperty.call(type3.styleAliases, style3)) { style3 = type3.styleAliases[style3]; } result[tag2] = 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(options3) { this.schema = options3["schema"] || _default; this.indent = Math.max(1, options3["indent"] || 2); this.noArrayIndent = options3["noArrayIndent"] || false; this.skipInvalid = options3["skipInvalid"] || false; this.flowLevel = common.isNothing(options3["flowLevel"]) ? -1 : options3["flowLevel"]; this.styleMap = compileStyleMap(this.schema, options3["styles"] || null); this.sortKeys = options3["sortKeys"] || false; this.lineWidth = options3["lineWidth"] || 80; this.noRefs = options3["noRefs"] || false; this.noCompatMode = options3["noCompatMode"] || false; this.condenseFlow = options3["condenseFlow"] || false; this.quotingType = options3["quotingType"] === '"' ? QUOTING_TYPE_DOUBLE : QUOTING_TYPE_SINGLE; this.forceQuotes = options3["forceQuotes"] || false; this.replacer = typeof options3["replacer"] === "function" ? options3["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(state5, level) { return "\n" + common.repeat(" ", state5.indent * level); } function testImplicitResolving(state5, str2) { var index, length2, type3; for (index = 0, length2 = state5.implicitTypes.length; index < length2; index += 1) { type3 = state5.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(state5, string3, level, iskey, inblock) { state5.dump = function() { if (string3.length === 0) { return state5.quotingType === QUOTING_TYPE_DOUBLE ? '""' : "''"; } if (!state5.noCompatMode) { if (DEPRECATED_BOOLEANS_SYNTAX.indexOf(string3) !== -1 || DEPRECATED_BASE60_SYNTAX.test(string3)) { return state5.quotingType === QUOTING_TYPE_DOUBLE ? '"' + string3 + '"' : "'" + string3 + "'"; } } var indent = state5.indent * Math.max(1, level); var lineWidth = state5.lineWidth === -1 ? -1 : Math.max(Math.min(state5.lineWidth, 40), state5.lineWidth - indent); var singleLineOnly = iskey || state5.flowLevel > -1 && level >= state5.flowLevel; function testAmbiguity(string4) { return testImplicitResolving(state5, string4); } __name(testAmbiguity, "testAmbiguity"); switch (chooseScalarStyle( string3, singleLineOnly, state5.indent, lineWidth, testAmbiguity, state5.quotingType, state5.forceQuotes && !iskey, inblock )) { case STYLE_PLAIN: return string3; case STYLE_SINGLE: return "'" + string3.replace(/'/g, "''") + "'"; case STYLE_LITERAL: return "|" + blockHeader(string3, state5.indent) + dropEndingNewline(indentString(string3, indent)); case STYLE_FOLDED: return ">" + blockHeader(string3, state5.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 match2; while (match2 = lineRe.exec(string3)) { var prefix = match2[1], line2 = match2[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 match2; var start3 = 0, end2, curr = 0, next3 = 0; var result = ""; while (match2 = breakRe.exec(line2)) { next3 = match2.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(state5, level, object3) { var _result = "", _tag2 = state5.tag, index, length2, value2; for (index = 0, length2 = object3.length; index < length2; index += 1) { value2 = object3[index]; if (state5.replacer) { value2 = state5.replacer.call(object3, String(index), value2); } if (writeNode(state5, level, value2, false, false) || typeof value2 === "undefined" && writeNode(state5, level, null, false, false)) { if (_result !== "") _result += "," + (!state5.condenseFlow ? " " : ""); _result += state5.dump; } } state5.tag = _tag2; state5.dump = "[" + _result + "]"; } function writeBlockSequence(state5, level, object3, compact2) { var _result = "", _tag2 = state5.tag, index, length2, value2; for (index = 0, length2 = object3.length; index < length2; index += 1) { value2 = object3[index]; if (state5.replacer) { value2 = state5.replacer.call(object3, String(index), value2); } if (writeNode(state5, level + 1, value2, true, true, false, true) || typeof value2 === "undefined" && writeNode(state5, level + 1, null, true, true, false, true)) { if (!compact2 || _result !== "") { _result += generateNextLine(state5, level); } if (state5.dump && CHAR_LINE_FEED === state5.dump.charCodeAt(0)) { _result += "-"; } else { _result += "- "; } _result += state5.dump; } } state5.tag = _tag2; state5.dump = _result || "[]"; } function writeFlowMapping(state5, level, object3) { var _result = "", _tag2 = state5.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 (state5.condenseFlow) pairBuffer += '"'; objectKey = objectKeyList[index]; objectValue = object3[objectKey]; if (state5.replacer) { objectValue = state5.replacer.call(object3, objectKey, objectValue); } if (!writeNode(state5, level, objectKey, false, false)) { continue; } if (state5.dump.length > 1024) pairBuffer += "? "; pairBuffer += state5.dump + (state5.condenseFlow ? '"' : "") + ":" + (state5.condenseFlow ? "" : " "); if (!writeNode(state5, level, objectValue, false, false)) { continue; } pairBuffer += state5.dump; _result += pairBuffer; } state5.tag = _tag2; state5.dump = "{" + _result + "}"; } function writeBlockMapping(state5, level, object3, compact2) { var _result = "", _tag2 = state5.tag, objectKeyList = Object.keys(object3), index, length2, objectKey, objectValue, explicitPair, pairBuffer; if (state5.sortKeys === true) { objectKeyList.sort(); } else if (typeof state5.sortKeys === "function") { objectKeyList.sort(state5.sortKeys); } else if (state5.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(state5, level); } objectKey = objectKeyList[index]; objectValue = object3[objectKey]; if (state5.replacer) { objectValue = state5.replacer.call(object3, objectKey, objectValue); } if (!writeNode(state5, level + 1, objectKey, true, true, true)) { continue; } explicitPair = state5.tag !== null && state5.tag !== "?" || state5.dump && state5.dump.length > 1024; if (explicitPair) { if (state5.dump && CHAR_LINE_FEED === state5.dump.charCodeAt(0)) { pairBuffer += "?"; } else { pairBuffer += "? "; } } pairBuffer += state5.dump; if (explicitPair) { pairBuffer += generateNextLine(state5, level); } if (!writeNode(state5, level + 1, objectValue, true, explicitPair)) { continue; } if (state5.dump && CHAR_LINE_FEED === state5.dump.charCodeAt(0)) { pairBuffer += ":"; } else { pairBuffer += ": "; } pairBuffer += state5.dump; _result += pairBuffer; } state5.tag = _tag2; state5.dump = _result || "{}"; } function detectType2(state5, object3, explicit) { var _result, typeList, index, length2, type3, style3; typeList = explicit ? state5.explicitTypes : state5.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) { state5.tag = type3.representName(object3); } else { state5.tag = type3.tag; } } else { state5.tag = "?"; } if (type3.represent) { style3 = state5.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'); } state5.dump = _result; } return true; } } return false; } function writeNode(state5, level, object3, block3, compact2, iskey, isblockseq) { state5.tag = null; state5.dump = object3; if (!detectType2(state5, object3, false)) { detectType2(state5, object3, true); } var type3 = _toString.call(state5.dump); var inblock = block3; var tagStr; if (block3) { block3 = state5.flowLevel < 0 || state5.flowLevel > level; } var objectOrArray = type3 === "[object Object]" || type3 === "[object Array]", duplicateIndex, duplicate; if (objectOrArray) { duplicateIndex = state5.duplicates.indexOf(object3); duplicate = duplicateIndex !== -1; } if (state5.tag !== null && state5.tag !== "?" || duplicate || state5.indent !== 2 && level > 0) { compact2 = false; } if (duplicate && state5.usedDuplicates[duplicateIndex]) { state5.dump = "*ref_" + duplicateIndex; } else { if (objectOrArray && duplicate && !state5.usedDuplicates[duplicateIndex]) { state5.usedDuplicates[duplicateIndex] = true; } if (type3 === "[object Object]") { if (block3 && Object.keys(state5.dump).length !== 0) { writeBlockMapping(state5, level, state5.dump, compact2); if (duplicate) { state5.dump = "&ref_" + duplicateIndex + state5.dump; } } else { writeFlowMapping(state5, level, state5.dump); if (duplicate) { state5.dump = "&ref_" + duplicateIndex + " " + state5.dump; } } } else if (type3 === "[object Array]") { if (block3 && state5.dump.length !== 0) { if (state5.noArrayIndent && !isblockseq && level > 0) { writeBlockSequence(state5, level - 1, state5.dump, compact2); } else { writeBlockSequence(state5, level, state5.dump, compact2); } if (duplicate) { state5.dump = "&ref_" + duplicateIndex + state5.dump; } } else { writeFlowSequence(state5, level, state5.dump); if (duplicate) { state5.dump = "&ref_" + duplicateIndex + " " + state5.dump; } } } else if (type3 === "[object String]") { if (state5.tag !== "?") { writeScalar(state5, state5.dump, level, iskey, inblock); } } else if (type3 === "[object Undefined]") { return false; } else { if (state5.skipInvalid) return false; throw new exception("unacceptable kind of an object to dump " + type3); } if (state5.tag !== null && state5.tag !== "?") { tagStr = encodeURI( state5.tag[0] === "!" ? state5.tag.slice(1) : state5.tag ).replace(/!/g, "%21"); if (state5.tag[0] === "!") { tagStr = "!" + tagStr; } else if (tagStr.slice(0, 18) === "tag:yaml.org,2002:") { tagStr = "!!" + tagStr.slice(18); } else { tagStr = "!<" + tagStr + ">"; } state5.dump = tagStr + " " + state5.dump; } } return true; } function getDuplicateReferences(object3, state5) { var objects = [], duplicatesIndexes = [], index, length2; inspectNode(object3, objects, duplicatesIndexes); for (index = 0, length2 = duplicatesIndexes.length; index < length2; index += 1) { state5.duplicates.push(objects[duplicatesIndexes[index]]); } state5.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, options3) { options3 = options3 || {}; var state5 = new State(options3); if (!state5.noRefs) getDuplicateReferences(input, state5); var value2 = input; if (state5.replacer) { value2 = state5.replacer.call({ "": value2 }, "", value2); } if (writeNode(state5, 0, value2, true, true)) return state5.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/[email protected]/node_modules/js-yaml/dist/js-yaml.mjs"() { "use strict"; __name(isNothing, "isNothing"); __name(isObject2, "isObject"); __name(toArray, "toArray"); __name(extend2, "extend"); __name(repeat, "repeat"); __name(isNegativeZero, "isNegativeZero"); isNothing_1 = isNothing; isObject_1 = isObject2; 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(data5) { return data5 !== null ? data5 : ""; }, "construct") }); seq = new type2("tag:yaml.org,2002:seq", { kind: "sequence", construct: /* @__PURE__ */ __name(function(data5) { return data5 !== null ? data5 : []; }, "construct") }); map2 = new type2("tag:yaml.org,2002:map", { kind: "mapping", construct: /* @__PURE__ */ __name(function(data5) { return data5 !== null ? data5 : {}; }, "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"); 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(state5, name, args) { var match2, major, minor; if (state5.version !== null) { throwError(state5, "duplication of %YAML directive"); } if (args.length !== 1) { throwError(state5, "YAML directive accepts exactly one argument"); } match2 = /^([0-9]+)\.([0-9]+)$/.exec(args[0]); if (match2 === null) { throwError(state5, "ill-formed argument of the YAML directive"); } major = parseInt(match2[1], 10); minor = parseInt(match2[2], 10); if (major !== 1) { throwError(state5, "unacceptable YAML version of the document"); } state5.version = args[0]; state5.checkLineBreaks = minor < 2; if (minor !== 1 && minor !== 2) { throwWarning(state5, "unsupported YAML version of the document"); } }, "handleYamlDirective"), TAG: /* @__PURE__ */ __name(function handleTagDirective(state5, name, args) { var handle, prefix; if (args.length !== 2) { throwError(state5, "TAG directive accepts exactly two arguments"); } handle = args[0]; prefix = args[1]; if (!PATTERN_TAG_HANDLE.test(handle)) { throwError(state5, "ill-formed tag handle (first argument) of the TAG directive"); } if (_hasOwnProperty$1.call(state5.tagMap, handle)) { throwError(state5, 'there is a previously declared suffix for "' + handle + '" tag handle'); } if (!PATTERN_TAG_URI.test(prefix)) { throwError(state5, "ill-formed tag prefix (second argument) of the TAG directive"); } try { prefix = decodeURIComponent(prefix); } catch (err) { throwError(state5, "tag prefix is malformed: " + prefix); } state5.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"); } }); // src/diagrams/flowchart/flowDb.ts function getCompiledStyles(classDefs) { let compiledStyles = []; for (const customClass of classDefs) { const cssClass = 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; } var MERMAID_DOM_ID_PREFIX, vertexCounter, config2, vertices, edges, classes, subGraphs, subGraphLookup, tooltips, subCount, firstGraphFlag, direction, version, funs, sanitizeText4, lookUpDomId, addVertex, addSingleLink, addLink, updateLinkInterpolate, updateLink, addClass, setDirection, setClass, setTooltip, setClickFun, setLink, getTooltip, setClickEvent, bindFunctions, getDirection, getVertices, getEdges, getClasses, setupToolTips, clear3, setGen, defaultStyle, addSubGraph, getPosForId, secCount, posCrossRef, indexNodes2, getDepthFirstPos, indexNodes, getSubGraphs, firstGraph, destructStartLink, countChar, destructEndLink, destructLink, exists, makeUniq, lex, getTypeFromVertex, findNode, destructEdgeType, addNodeFromVertex, getData, flowDb_default; var init_flowDb = __esm({ "src/diagrams/flowchart/flowDb.ts"() { "use strict"; init_src32(); init_utils2(); init_diagramAPI(); init_common(); init_shapes(); init_logger(); init_js_yaml(); init_commonDb(); MERMAID_DOM_ID_PREFIX = "flowchart-"; vertexCounter = 0; config2 = getConfig2(); vertices = /* @__PURE__ */ new Map(); edges = []; classes = /* @__PURE__ */ new Map(); subGraphs = []; subGraphLookup = /* @__PURE__ */ new Map(); tooltips = /* @__PURE__ */ new Map(); subCount = 0; firstGraphFlag = true; funs = []; sanitizeText4 = /* @__PURE__ */ __name((txt) => common_default.sanitizeText(txt, config2), "sanitizeText"); lookUpDomId = /* @__PURE__ */ __name(function(id28) { for (const vertex of vertices.values()) { if (vertex.id === id28) { return vertex.domId; } } return id28; }, "lookUpDomId"); addVertex = /* @__PURE__ */ __name(function(id28, textObj, type3, style3, classes6, dir2, props = {}, shapeData) { if (!id28 || id28.trim().length === 0) { return; } let txt; let vertex = vertices.get(id28); if (vertex === void 0) { vertex = { id: id28, labelType: "text", domId: MERMAID_DOM_ID_PREFIX + id28 + "-" + vertexCounter, styles: [], classes: [] }; vertices.set(id28, vertex); } vertexCounter++; if (textObj !== void 0) { config2 = getConfig2(); txt = sanitizeText4(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 = id28; } } if (type3 !== void 0) { vertex.type = type3; } if (style3 !== void 0 && style3 !== null) { style3.forEach(function(s2) { vertex.styles.push(s2); }); } if (classes6 !== void 0 && classes6 !== null) { classes6.forEach(function(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 (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) { 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; } if (doc?.icon) { vertex.icon = doc?.icon; if (!doc.label?.trim() && vertex.text === id28) { 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 === id28) { 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); } } }, "addVertex"); addSingleLink = /* @__PURE__ */ __name(function(_start, _end, type3) { const start3 = _start; const end2 = _end; const edge = { start: start3, end: end2, type: void 0, text: "", labelType: "text" }; log.info("abc78 Got edge...", edge); const linkTextObj = type3.text; if (linkTextObj !== void 0) { edge.text = sanitizeText4(linkTextObj.text.trim()); if (edge.text.startsWith('"') && edge.text.endsWith('"')) { edge.text = edge.text.substring(1, edge.text.length - 1); } edge.labelType = linkTextObj.type; } if (type3 !== void 0) { edge.type = type3.type; edge.stroke = type3.stroke; edge.length = type3.length > 10 ? 10 : type3.length; } if (edges.length < (config2.maxEdges ?? 500)) { log.info("Pushing edge..."); edges.push(edge); } else { throw new Error( `Edge limit exceeded. ${edges.length} edges found, but the limit is ${config2.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.` ); } }, "addSingleLink"); addLink = /* @__PURE__ */ __name(function(_start, _end, type3) { log.info("addLink", _start, _end, type3); for (const start3 of _start) { for (const end2 of _end) { addSingleLink(start3, end2, type3); } } }, "addLink"); updateLinkInterpolate = /* @__PURE__ */ __name(function(positions2, interpolate) { positions2.forEach(function(pos) { if (pos === "default") { edges.defaultInterpolate = interpolate; } else { edges[pos].interpolate = interpolate; } }); }, "updateLinkInterpolate"); updateLink = /* @__PURE__ */ __name(function(positions2, style3) { positions2.forEach(function(pos) { if (typeof pos === "number" && pos >= edges.length) { throw new Error( `The index ${pos} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${edges.length - 1}. (Help: Ensure that the index is within the range of existing edges.)` ); } if (pos === "default") { edges.defaultStyle = style3; } else { edges[pos].style = style3; if ((edges[pos]?.style?.length ?? 0) > 0 && !edges[pos]?.style?.some((s2) => s2?.startsWith("fill"))) { edges[pos]?.style?.push("fill:none"); } } }); }, "updateLink"); addClass = /* @__PURE__ */ __name(function(ids, style3) { ids.split(",").forEach(function(id28) { let classNode = classes.get(id28); if (classNode === void 0) { classNode = { id: id28, styles: [], textStyles: [] }; classes.set(id28, classNode); } if (style3 !== void 0 && style3 !== null) { style3.forEach(function(s2) { if (/color/.exec(s2)) { const newStyle = s2.replace("fill", "bgFill"); classNode.textStyles.push(newStyle); } classNode.styles.push(s2); }); } }); }, "addClass"); setDirection = /* @__PURE__ */ __name(function(dir2) { direction = dir2; if (/.*/.exec(direction)) { direction = "LR"; } if (/.*v/.exec(direction)) { direction = "TB"; } if (direction === "TD") { direction = "TB"; } }, "setDirection"); setClass = /* @__PURE__ */ __name(function(ids, className) { for (const id28 of ids.split(",")) { const vertex = vertices.get(id28); if (vertex) { vertex.classes.push(className); } const subGraph = subGraphLookup.get(id28); if (subGraph) { subGraph.classes.push(className); } } }, "setClass"); setTooltip = /* @__PURE__ */ __name(function(ids, tooltip) { if (tooltip === void 0) { return; } tooltip = sanitizeText4(tooltip); for (const id28 of ids.split(",")) { tooltips.set(version === "gen-1" ? lookUpDomId(id28) : id28, tooltip); } }, "setTooltip"); setClickFun = /* @__PURE__ */ __name(function(id28, functionName, functionArgs) { const domId = lookUpDomId(id28); 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(id28); } const vertex = vertices.get(id28); if (vertex) { vertex.haveCallback = true; funs.push(function() { const elem = document.querySelector(`[id="${domId}"]`); if (elem !== null) { elem.addEventListener( "click", function() { utils_default2.runFunc(functionName, ...argList); }, false ); } }); } }, "setClickFun"); setLink = /* @__PURE__ */ __name(function(ids, linkStr, target) { ids.split(",").forEach(function(id28) { const vertex = vertices.get(id28); if (vertex !== void 0) { vertex.link = utils_default2.formatUrl(linkStr, config2); vertex.linkTarget = target; } }); setClass(ids, "clickable"); }, "setLink"); getTooltip = /* @__PURE__ */ __name(function(id28) { return tooltips.get(id28); }, "getTooltip"); setClickEvent = /* @__PURE__ */ __name(function(ids, functionName, functionArgs) { ids.split(",").forEach(function(id28) { setClickFun(id28, functionName, functionArgs); }); setClass(ids, "clickable"); }, "setClickEvent"); bindFunctions = /* @__PURE__ */ __name(function(element3) { funs.forEach(function(fun) { fun(element3); }); }, "bindFunctions"); getDirection = /* @__PURE__ */ __name(function() { return direction.trim(); }, "getDirection"); getVertices = /* @__PURE__ */ __name(function() { return vertices; }, "getVertices"); getEdges = /* @__PURE__ */ __name(function() { return edges; }, "getEdges"); getClasses = /* @__PURE__ */ __name(function() { return classes; }, "getClasses"); setupToolTips = /* @__PURE__ */ __name(function(element3) { let tooltipElem = select_default2(".mermaidTooltip"); if ((tooltipElem._groups || tooltipElem)[0][0] === null) { tooltipElem = select_default2("body").append("div").attr("class", "mermaidTooltip").style("opacity", 0); } const svg = select_default2(element3).select("svg"); const nodes7 = svg.selectAll("g.node"); nodes7.on("mouseover", function() { const el = select_default2(this); const title2 = el.attr("title"); if (title2 === null) { return; } const rect3 = this?.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(tooltipElem.html().replace(/<br\/>/g, "
    ")); el.classed("hover", true); }).on("mouseout", function() { tooltipElem.transition().duration(500).style("opacity", 0); const el = select_default2(this); el.classed("hover", false); }); }, "setupToolTips"); funs.push(setupToolTips); clear3 = /* @__PURE__ */ __name(function(ver = "gen-1") { vertices = /* @__PURE__ */ new Map(); classes = /* @__PURE__ */ new Map(); edges = []; funs = [setupToolTips]; subGraphs = []; subGraphLookup = /* @__PURE__ */ new Map(); subCount = 0; tooltips = /* @__PURE__ */ new Map(); firstGraphFlag = true; version = ver; config2 = getConfig2(); clear(); }, "clear"); setGen = /* @__PURE__ */ __name((ver) => { version = ver || "gen-2"; }, "setGen"); defaultStyle = /* @__PURE__ */ __name(function() { return "fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"; }, "defaultStyle"); addSubGraph = /* @__PURE__ */ __name(function(_id, list2, _title) { let id28 = _id.text.trim(); let title2 = _title.text; if (_id === _title && /\s/.exec(_title.text)) { id28 = void 0; } function uniq2(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 }; } __name(uniq2, "uniq"); const { nodeList, dir: dir2 } = uniq2(list2.flat()); if (version === "gen-1") { for (let i2 = 0; i2 < nodeList.length; i2++) { nodeList[i2] = lookUpDomId(nodeList[i2]); } } id28 = id28 ?? "subGraph" + subCount; title2 = title2 || ""; title2 = sanitizeText4(title2); subCount = subCount + 1; const subGraph = { id: id28, nodes: nodeList, title: title2.trim(), classes: [], dir: dir2, labelType: _title.type }; log.info("Adding", subGraph.id, subGraph.nodes, subGraph.dir); subGraph.nodes = makeUniq(subGraph, subGraphs).nodes; subGraphs.push(subGraph); subGraphLookup.set(id28, subGraph); return id28; }, "addSubGraph"); getPosForId = /* @__PURE__ */ __name(function(id28) { for (const [i2, subGraph] of subGraphs.entries()) { if (subGraph.id === id28) { return i2; } } return -1; }, "getPosForId"); secCount = -1; posCrossRef = []; indexNodes2 = /* @__PURE__ */ __name(function(id28, pos) { const nodes7 = subGraphs[pos].nodes; secCount = secCount + 1; if (secCount > 2e3) { return { result: false, count: 0 }; } posCrossRef[secCount] = pos; if (subGraphs[pos].id === id28) { return { result: true, count: 0 }; } let count = 0; let posCount = 1; while (count < nodes7.length) { const childPos = getPosForId(nodes7[count]); if (childPos >= 0) { const res = indexNodes2(id28, childPos); if (res.result) { return { result: true, count: posCount + res.count }; } else { posCount = posCount + res.count; } } count = count + 1; } return { result: false, count: posCount }; }, "indexNodes2"); getDepthFirstPos = /* @__PURE__ */ __name(function(pos) { return posCrossRef[pos]; }, "getDepthFirstPos"); indexNodes = /* @__PURE__ */ __name(function() { secCount = -1; if (subGraphs.length > 0) { indexNodes2("none", subGraphs.length - 1); } }, "indexNodes"); getSubGraphs = /* @__PURE__ */ __name(function() { return subGraphs; }, "getSubGraphs"); firstGraph = /* @__PURE__ */ __name(() => { if (firstGraphFlag) { firstGraphFlag = false; return true; } return false; }, "firstGraph"); destructStartLink = /* @__PURE__ */ __name((_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 }; }, "destructStartLink"); countChar = /* @__PURE__ */ __name((char2, str2) => { const length2 = str2.length; let count = 0; for (let i2 = 0; i2 < length2; ++i2) { if (str2[i2] === char2) { ++count; } } return count; }, "countChar"); destructEndLink = /* @__PURE__ */ __name((_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 = countChar(".", line2); if (dots) { stroke = "dotted"; length2 = dots; } return { type: type3, stroke, length: length2 }; }, "destructEndLink"); destructLink = /* @__PURE__ */ __name((_str, _startStr) => { const info2 = destructEndLink(_str); let startInfo; if (_startStr) { startInfo = 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; }, "destructLink"); exists = /* @__PURE__ */ __name((allSgs, _id) => { for (const sg of allSgs) { if (sg.nodes.includes(_id)) { return true; } } return false; }, "exists"); makeUniq = /* @__PURE__ */ __name((sg, allSubgraphs) => { const res = []; sg.nodes.forEach((_id, pos) => { if (!exists(allSubgraphs, _id)) { res.push(sg.nodes[pos]); } }); return { nodes: res }; }, "makeUniq"); lex = { firstGraph }; getTypeFromVertex = /* @__PURE__ */ __name((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; } }, "getTypeFromVertex"); findNode = /* @__PURE__ */ __name((nodes7, id28) => nodes7.find((node2) => node2.id === id28), "findNode"); destructEdgeType = /* @__PURE__ */ __name((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 }; }, "destructEdgeType"); addNodeFromVertex = /* @__PURE__ */ __name((vertex, nodes7, parentDB, subGraphDB, config6, look) => { const parentId = parentDB.get(vertex.id); const isGroup2 = subGraphDB.get(vertex.id) ?? false; const node2 = findNode(nodes7, vertex.id); if (node2) { node2.cssStyles = vertex.styles; node2.cssCompiledStyles = getCompiledStyles(vertex.classes); node2.cssClasses = vertex.classes.join(" "); } else { const baseNode = { id: vertex.id, label: vertex.text, labelStyle: "", parentId, padding: config6.flowchart?.padding || 8, cssStyles: vertex.styles, cssCompiledStyles: getCompiledStyles(["default", "node", ...vertex.classes]), cssClasses: "default " + vertex.classes.join(" "), dir: vertex.dir, domId: vertex.domId, look, link: vertex.link, linkTarget: vertex.linkTarget, tooltip: getTooltip(vertex.id), icon: vertex.icon, pos: vertex.pos, img: vertex.img, assetWidth: vertex.assetWidth, assetHeight: vertex.assetHeight, constraint: vertex.constraint }; if (isGroup2) { nodes7.push({ ...baseNode, isGroup: true, shape: "rect" }); } else { nodes7.push({ ...baseNode, isGroup: false, shape: getTypeFromVertex(vertex) }); } } }, "addNodeFromVertex"); __name(getCompiledStyles, "getCompiledStyles"); getData = /* @__PURE__ */ __name(() => { const config6 = getConfig2(); const nodes7 = []; const edges5 = []; const subGraphs2 = getSubGraphs(); const parentDB = /* @__PURE__ */ new Map(); const subGraphDB = /* @__PURE__ */ new Map(); for (let i2 = subGraphs2.length - 1; i2 >= 0; i2--) { const subGraph = subGraphs2[i2]; if (subGraph.nodes.length > 0) { subGraphDB.set(subGraph.id, true); } for (const id28 of subGraph.nodes) { parentDB.set(id28, subGraph.id); } } for (let i2 = subGraphs2.length - 1; i2 >= 0; i2--) { const subGraph = subGraphs2[i2]; nodes7.push({ id: subGraph.id, label: subGraph.title, labelStyle: "", parentId: parentDB.get(subGraph.id), padding: 8, cssCompiledStyles: getCompiledStyles(subGraph.classes), cssClasses: subGraph.classes.join(" "), shape: "rect", dir: subGraph.dir, isGroup: true, look: config6.look }); } const n2 = getVertices(); n2.forEach((vertex) => { addNodeFromVertex(vertex, nodes7, parentDB, subGraphDB, config6, config6.look || "classic"); }); const e3 = getEdges(); e3.forEach((rawEdge, index) => { const { arrowTypeStart, arrowTypeEnd } = destructEdgeType(rawEdge.type); const styles3 = [...e3.defaultStyle ?? []]; if (rawEdge.style) { styles3.push(...rawEdge.style); } const edge = { id: getEdgeId(rawEdge.start, rawEdge.end, { counter: index, prefix: "L" }), start: rawEdge.start, end: rawEdge.end, type: rawEdge.type ?? "normal", label: rawEdge.text, labelpos: "c", thickness: rawEdge.stroke, minlen: rawEdge.length, classes: rawEdge?.stroke === "invisible" ? "" : "edge-thickness-normal edge-pattern-solid flowchart-link", arrowTypeStart: rawEdge?.stroke === "invisible" ? "none" : arrowTypeStart, arrowTypeEnd: rawEdge?.stroke === "invisible" ? "none" : arrowTypeEnd, arrowheadStyle: "fill: #333", labelStyle: styles3, style: styles3, pattern: rawEdge.stroke, look: config6.look }; edges5.push(edge); }); return { nodes: nodes7, edges: edges5, other: {}, config: config6 }; }, "getData"); flowDb_default = { defaultConfig: /* @__PURE__ */ __name(() => defaultConfig2.flowchart, "defaultConfig"), setAccTitle, getAccTitle, getAccDescription, getData, setAccDescription, addVertex, lookUpDomId, addLink, updateLinkInterpolate, updateLink, addClass, setDirection, setClass, setTooltip, getTooltip, setClickEvent, setLink, bindFunctions, getDirection, getVertices, getEdges, getClasses, clear: clear3, setGen, defaultStyle, addSubGraph, getDepthFirstPos, indexNodes, getSubGraphs, destructLink, lex, exists, makeUniq, setDiagramTitle, getDiagramTitle }; } }); // src/rendering-util/insertElementsForSize.js var getDiagramElement; var init_insertElementsForSize = __esm({ "src/rendering-util/insertElementsForSize.js"() { "use strict"; init_src32(); getDiagramElement = /* @__PURE__ */ __name((id28, securityLevel) => { let sandboxElement; if (securityLevel === "sandbox") { sandboxElement = select_default2("#i" + id28); } const root4 = securityLevel === "sandbox" ? select_default2(sandboxElement.nodes()[0].contentDocument.body) : select_default2("body"); const svg = root4.select(`[id="${id28}"]`); return svg; }, "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.js var rect, noteGroup, roundedWithTitle, kanbanSection, divider, squareRect2, shapes2, clusterElems, insertCluster, clear4; var init_clusters = __esm({ "src/rendering-util/rendering-elements/clusters.js"() { "use strict"; init_diagramAPI(); init_common(); init_logger(); init_subGraphTitleMargins(); init_src32(); init_rough_esm(); init_createText(); init_intersect_rect(); init_createLabel(); init_roundedRectPath(); init_handDrawnShapeStyles(); 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.id).attr("data-look", node2.look); const useHtmlLabels = evaluate(siteConfig2.flowchart.htmlLabels); const labelEl = shapeSvg.insert("g").attr("class", "cluster-label "); const text3 = await createText(labelEl, node2.label, { style: node2.labelStyle, useHtmlLabels, isNode: true }); let bbox = text3.getBBox(); if (evaluate(siteConfig2.flowchart.htmlLabels)) { const div = text3.children[0]; const dv = select_default2(text3); 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 y5 = node2.y - height2 / 2; log.trace("Data ", node2, JSON.stringify(node2)); let rect3; if (node2.look === "handDrawn") { const rc = at.svg(shapeSvg); const options3 = userNodeOverrides(node2, { roughness: 0.7, fill: clusterBkg, // fill: 'red', stroke: clusterBorder, fillWeight: 3, seed: handDrawnSeed }); const roughNode = rc.path(createRoundedRectPathD(x5, y5, width3, height2, 0), options3); 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", y5).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.id); const rect3 = shapeSvg.insert("rect", ":first-child"); const padding2 = 0 * node2.padding; const halfPadding = padding2 / 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 + padding2).attr("height", node2.height + padding2).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.id).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 text3 = label.node().appendChild(await createLabel_default(node2.label, node2.labelStyle, void 0, true)); let bbox = text3.getBBox(); if (evaluate(siteConfig2.flowchart.htmlLabels)) { const div = text3.children[0]; const dv = select_default2(text3); bbox = div.getBoundingClientRect(); dv.attr("width", bbox.width); dv.attr("height", bbox.height); } const padding2 = 0 * node2.padding; const halfPadding = padding2 / 2; const width3 = (node2.width <= bbox.width + node2.padding ? bbox.width + node2.padding : node2.width) + padding2; if (node2.width <= bbox.width + node2.padding) { node2.diff = (width3 - node2.width) / 2 - node2.padding; } else { node2.diff = -node2.padding; } const height2 = node2.height + padding2; const innerHeight = node2.height + padding2 - bbox.height - 6; const x5 = node2.x - width3 / 2; const y5 = 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, y5, width3, height2, 10), { roughness: 0.7, fill: compositeTitleBackground, fillStyle: "solid", stroke: nodeBorder, seed: handDrawnSeed }) : rc.rectangle(x5, y5, 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", y5).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}, ${y5 + 1 - (evaluate(siteConfig2.flowchart.htmlLabels) ? 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.id).attr("data-look", node2.look); const useHtmlLabels = evaluate(siteConfig2.flowchart.htmlLabels); const labelEl = shapeSvg.insert("g").attr("class", "cluster-label "); const text3 = await createText(labelEl, node2.label, { style: node2.labelStyle, useHtmlLabels, isNode: true, width: node2.width }); let bbox = text3.getBBox(); if (evaluate(siteConfig2.flowchart.htmlLabels)) { const div = text3.children[0]; const dv = select_default2(text3); 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 y5 = node2.y - height2 / 2; log.trace("Data ", node2, JSON.stringify(node2)); let rect3; if (node2.look === "handDrawn") { const rc = at.svg(shapeSvg); const options3 = userNodeOverrides(node2, { roughness: 0.7, fill: clusterBkg, // fill: 'red', stroke: clusterBorder, fillWeight: 4, seed: handDrawnSeed }); const roughNode = rc.path(createRoundedRectPathD(x5, y5, width3, height2, node2.rx), options3); 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", y5).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.id).attr("data-look", node2.look); const outerRectG = shapeSvg.insert("g", ":first-child"); const padding2 = 0 * node2.padding; const width3 = node2.width + padding2; node2.diff = -node2.padding; const height2 = node2.height + padding2; const x5 = node2.x - width3 / 2; const y5 = node2.y - height2 / 2; node2.width = width3; let rect3; if (node2.look === "handDrawn") { const rc = at.svg(shapeSvg); const roughOuterNode = rc.rectangle(x5, y5, 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"); const outerRectClass = "divider"; rect3.attr("class", outerRectClass).attr("x", x5).attr("y", y5).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 }; 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"); clear4 = /* @__PURE__ */ __name(() => { clusterElems = /* @__PURE__ */ new Map(); }, "clear"); } }); // 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, pointTransformer, getLineFunctionsWithOffset; var init_lineWithOffset = __esm({ "src/utils/lineWithOffset.ts"() { "use strict"; markerOffsets = { aggregation: 18, extension: 18, composition: 18, dependency: 6, lollipop: 13.5, arrow_point: 4 }; __name(calculateDeltaAndAngle, "calculateDeltaAndAngle"); pointTransformer = /* @__PURE__ */ __name((data5) => { if (Array.isArray(data5)) { return { x: data5[0], y: data5[1] }; } return data5; }, "pointTransformer"); getLineFunctionsWithOffset = /* @__PURE__ */ __name((edge) => { return { x: /* @__PURE__ */ __name(function(d2, i2, data5) { let offset = 0; const DIRECTION = pointTransformer(data5[0]).x < pointTransformer(data5[data5.length - 1]).x ? "left" : "right"; if (i2 === 0 && Object.hasOwn(markerOffsets, edge.arrowTypeStart)) { const { angle: angle2, deltaX } = calculateDeltaAndAngle(data5[0], data5[1]); offset = markerOffsets[edge.arrowTypeStart] * Math.cos(angle2) * (deltaX >= 0 ? 1 : -1); } else if (i2 === data5.length - 1 && Object.hasOwn(markerOffsets, edge.arrowTypeEnd)) { const { angle: angle2, deltaX } = calculateDeltaAndAngle( data5[data5.length - 1], data5[data5.length - 2] ); offset = markerOffsets[edge.arrowTypeEnd] * Math.cos(angle2) * (deltaX >= 0 ? 1 : -1); } const differenceToEnd = Math.abs( pointTransformer(d2).x - pointTransformer(data5[data5.length - 1]).x ); const differenceInYEnd = Math.abs( pointTransformer(d2).y - pointTransformer(data5[data5.length - 1]).y ); const differenceToStart = Math.abs(pointTransformer(d2).x - pointTransformer(data5[0]).x); const differenceInYStart = Math.abs(pointTransformer(d2).y - pointTransformer(data5[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(d2).x + offset; }, "x"), y: /* @__PURE__ */ __name(function(d2, i2, data5) { let offset = 0; const DIRECTION = pointTransformer(data5[0]).y < pointTransformer(data5[data5.length - 1]).y ? "down" : "up"; if (i2 === 0 && Object.hasOwn(markerOffsets, edge.arrowTypeStart)) { const { angle: angle2, deltaY } = calculateDeltaAndAngle(data5[0], data5[1]); offset = markerOffsets[edge.arrowTypeStart] * Math.abs(Math.sin(angle2)) * (deltaY >= 0 ? 1 : -1); } else if (i2 === data5.length - 1 && Object.hasOwn(markerOffsets, edge.arrowTypeEnd)) { const { angle: angle2, deltaY } = calculateDeltaAndAngle( data5[data5.length - 1], data5[data5.length - 2] ); offset = markerOffsets[edge.arrowTypeEnd] * Math.abs(Math.sin(angle2)) * (deltaY >= 0 ? 1 : -1); } const differenceToEnd = Math.abs( pointTransformer(d2).y - pointTransformer(data5[data5.length - 1]).y ); const differenceInXEnd = Math.abs( pointTransformer(d2).x - pointTransformer(data5[data5.length - 1]).x ); const differenceToStart = Math.abs(pointTransformer(d2).y - pointTransformer(data5[0]).y); const differenceInXStart = Math.abs(pointTransformer(d2).x - pointTransformer(data5[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(d2).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, addEdgeMarker; var init_edgeMarker = __esm({ "src/rendering-util/rendering-elements/edgeMarker.ts"() { "use strict"; init_logger(); addEdgeMarkers = /* @__PURE__ */ __name((svgPath, edge, url, id28, diagramType) => { if (edge.arrowTypeStart) { addEdgeMarker(svgPath, "start", edge.arrowTypeStart, url, id28, diagramType); } if (edge.arrowTypeEnd) { addEdgeMarker(svgPath, "end", edge.arrowTypeEnd, url, id28, diagramType); } }, "addEdgeMarkers"); arrowTypesMap = { arrow_cross: "cross", arrow_point: "point", arrow_barb: "barb", arrow_circle: "circle", aggregation: "aggregation", extension: "extension", composition: "composition", dependency: "dependency", lollipop: "lollipop" }; addEdgeMarker = /* @__PURE__ */ __name((svgPath, position5, arrowType, url, id28, diagramType) => { const endMarkerType = arrowTypesMap[arrowType]; if (!endMarkerType) { log.warn(`Unknown arrow type: ${arrowType}`); return; } const suffix = position5 === "start" ? "Start" : "End"; svgPath.attr(`marker-${position5}`, `url(${url}#${id28}_${diagramType}-${endMarkerType}${suffix})`); }, "addEdgeMarker"); } }); // src/rendering-util/rendering-elements/edges.js function setTerminalWidth(fo, value2) { if (getConfig2().flowchart.htmlLabels && 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 }; } var edgeLabels, terminalLabels, clear5, getLabelStyles, insertEdgeLabel, positionEdgeLabel, outsideNode, intersection, cutPathAtIntersect, findAdjacentPoint, fixCorners, insertEdge; var init_edges = __esm({ "src/rendering-util/rendering-elements/edges.js"() { "use strict"; init_diagramAPI(); init_common(); init_logger(); init_createText(); init_utils2(); init_lineWithOffset(); init_subGraphTitleMargins(); init_src32(); init_rough_esm(); init_createLabel(); init_edgeMarker(); edgeLabels = /* @__PURE__ */ new Map(); terminalLabels = /* @__PURE__ */ new Map(); clear5 = /* @__PURE__ */ __name(() => { edgeLabels.clear(); terminalLabels.clear(); }, "clear"); getLabelStyles = /* @__PURE__ */ __name((styleArray) => { let styles3 = styleArray ? styleArray.reduce((acc, style3) => acc + ";" + style3, "") : ""; return styles3; }, "getLabelStyles"); insertEdgeLabel = /* @__PURE__ */ __name(async (elem, edge) => { let useHtmlLabels = evaluate(getConfig2().flowchart.htmlLabels); const labelElement = await createText(elem, edge.label, { style: getLabelStyles(edge.labelStyle), useHtmlLabels, addSvgBackground: true, isNode: false }); log.info("abc82", edge, edge.labelType); const edgeLabel = elem.insert("g").attr("class", "edgeLabel"); const label = edgeLabel.insert("g").attr("class", "label"); label.node().appendChild(labelElement); let bbox = labelElement.getBBox(); if (useHtmlLabels) { const div = labelElement.children[0]; const dv = select_default2(labelElement); bbox = div.getBoundingClientRect(); dv.attr("width", bbox.width); dv.attr("height", bbox.height); } label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); edgeLabels.set(edge.id, edgeLabel); edge.width = bbox.width; edge.height = bbox.height; let fo; if (edge.startLabelLeft) { const startLabelElement = await createLabel_default( edge.startLabelLeft, getLabelStyles(edge.labelStyle) ); const startEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); const inner2 = startEdgeLabelLeft.insert("g").attr("class", "inner"); fo = inner2.node().appendChild(startLabelElement); const slBox = startLabelElement.getBBox(); inner2.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); if (!terminalLabels.get(edge.id)) { terminalLabels.set(edge.id, {}); } terminalLabels.get(edge.id).startLeft = startEdgeLabelLeft; setTerminalWidth(fo, edge.startLabelLeft); } if (edge.startLabelRight) { const startLabelElement = await createLabel_default( edge.startLabelRight, getLabelStyles(edge.labelStyle) ); const startEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); const inner2 = startEdgeLabelRight.insert("g").attr("class", "inner"); fo = startEdgeLabelRight.node().appendChild(startLabelElement); inner2.node().appendChild(startLabelElement); const slBox = startLabelElement.getBBox(); inner2.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); if (!terminalLabels.get(edge.id)) { terminalLabels.set(edge.id, {}); } terminalLabels.get(edge.id).startRight = startEdgeLabelRight; setTerminalWidth(fo, edge.startLabelRight); } if (edge.endLabelLeft) { const endLabelElement = await createLabel_default(edge.endLabelLeft, getLabelStyles(edge.labelStyle)); const endEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); const inner2 = endEdgeLabelLeft.insert("g").attr("class", "inner"); fo = inner2.node().appendChild(endLabelElement); const slBox = endLabelElement.getBBox(); inner2.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); endEdgeLabelLeft.node().appendChild(endLabelElement); if (!terminalLabels.get(edge.id)) { terminalLabels.set(edge.id, {}); } terminalLabels.get(edge.id).endLeft = endEdgeLabelLeft; setTerminalWidth(fo, edge.endLabelLeft); } if (edge.endLabelRight) { const endLabelElement = await createLabel_default(edge.endLabelRight, getLabelStyles(edge.labelStyle)); const endEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); const inner2 = endEdgeLabelRight.insert("g").attr("class", "inner"); fo = inner2.node().appendChild(endLabelElement); const slBox = endLabelElement.getBBox(); inner2.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); endEdgeLabelRight.node().appendChild(endLabelElement); 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 y5 = edge.y; if (path4) { const pos = utils_default2.calcLabelPosition(path4); log.debug( "Moving label " + edge.label + " from (", x5, ",", y5, ") to (", pos.x, ",", pos.y, ") abc88" ); if (paths.updatedPath) { x5 = pos.x; y5 = pos.y; } } el.attr("transform", `translate(${x5}, ${y5 + subGraphTitleTotalMargin / 2})`); } if (edge.startLabelLeft) { const el = terminalLabels.get(edge.id).startLeft; let x5 = edge.x; let y5 = edge.y; if (path4) { const pos = utils_default2.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, "start_left", path4); x5 = pos.x; y5 = pos.y; } el.attr("transform", `translate(${x5}, ${y5})`); } if (edge.startLabelRight) { const el = terminalLabels.get(edge.id).startRight; let x5 = edge.x; let y5 = edge.y; if (path4) { const pos = utils_default2.calcTerminalLabelPosition( edge.arrowTypeStart ? 10 : 0, "start_right", path4 ); x5 = pos.x; y5 = pos.y; } el.attr("transform", `translate(${x5}, ${y5})`); } if (edge.endLabelLeft) { const el = terminalLabels.get(edge.id).endLeft; let x5 = edge.x; let y5 = edge.y; if (path4) { const pos = utils_default2.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_left", path4); x5 = pos.x; y5 = pos.y; } el.attr("transform", `translate(${x5}, ${y5})`); } if (edge.endLabelRight) { const el = terminalLabels.get(edge.id).endRight; let x5 = edge.x; let y5 = edge.y; if (path4) { const pos = utils_default2.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_right", path4); x5 = pos.x; y5 = pos.y; } el.attr("transform", `translate(${x5}, ${y5})`); } }, "positionEdgeLabel"); outsideNode = /* @__PURE__ */ __name((node2, point8) => { const x5 = node2.x; const y5 = node2.y; const dx = Math.abs(point8.x - x5); const dy = Math.abs(point8.y - y5); const w3 = node2.width / 2; const h2 = node2.height / 2; return dx >= w3 || dy >= h2; }, "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 y5 = node2.y; const dx = Math.abs(x5 - insidePoint.x); const w3 = node2.width / 2; let r2 = insidePoint.x < outsidePoint.x ? w3 - dx : w3 + dx; const h2 = node2.height / 2; const Q2 = Math.abs(outsidePoint.y - insidePoint.y); const R2 = Math.abs(outsidePoint.x - insidePoint.x); if (Math.abs(y5 - outsidePoint.y) * w3 > Math.abs(x5 - outsidePoint.x) * h2) { let q2 = insidePoint.y < outsidePoint.y ? outsidePoint.y - h2 - y5 : y5 - h2 - outsidePoint.y; r2 = R2 * q2 / Q2; const res = { x: insidePoint.x < outsidePoint.x ? insidePoint.x + r2 : insidePoint.x - R2 + r2, y: insidePoint.y < outsidePoint.y ? insidePoint.y + Q2 - q2 : insidePoint.y - Q2 + q2 }; if (r2 === 0) { res.x = outsidePoint.x; res.y = outsidePoint.y; } if (R2 === 0) { res.x = outsidePoint.x; } if (Q2 === 0) { res.y = outsidePoint.y; } log.debug(`abc89 top/bottom calc, Q ${Q2}, q ${q2}, R ${R2}, r ${r2}`, res); return res; } else { if (insidePoint.x < outsidePoint.x) { r2 = outsidePoint.x - w3 - x5; } else { r2 = x5 - w3 - outsidePoint.x; } let q2 = Q2 * r2 / R2; let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R2 - r2 : insidePoint.x - R2 + r2; let _y = insidePoint.y < outsidePoint.y ? insidePoint.y + q2 : insidePoint.y - q2; log.debug(`sides calc abc89, Q ${Q2}, q ${q2}, R ${R2}, r ${r2}`, { _x, _y }); if (r2 === 0) { _x = outsidePoint.x; _y = outsidePoint.y; } if (R2 === 0) { _x = outsidePoint.x; } if (Q2 === 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, distance2) { const xDiff = pointB.x - pointA.x; const yDiff = pointB.y - pointA.y; const length2 = Math.sqrt(xDiff * xDiff + yDiff * yDiff); const ratio = distance2 / 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"); insertEdge = /* @__PURE__ */ __name(function(elem, edge, clusterDb2, diagramType, startNode, endNode, id28) { const { handDrawnSeed } = getConfig2(); let points = edge.points; let pointsHasChanged = false; const tail = startNode; var head2 = endNode; if (head2.intersect && tail.intersect) { points = points.slice(1, edge.points.length - 1); points.unshift(tail.intersect(points[0])); log.debug( "Last point APA12", edge.start, "-->", edge.end, points[points.length - 1], head2, head2.intersect(points[points.length - 1]) ); points.push(head2.intersect(points[points.length - 1])); } 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)); lineData = fixCorners(lineData); let curve = basis_default2; if (edge.curve) { curve = edge.curve; } const { x: x5, y: y5 } = getLineFunctionsWithOffset(edge); const lineFunction = line_default().x(x5).y(y5).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 = lineFunction(lineData); const edgeStyles = Array.isArray(edge.style) ? edge.style : [edge.style]; 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", edge.id).attr("class", " " + strokeClasses + (edge.classes ? " " + edge.classes : "")).attr("style", edgeStyles ? edgeStyles.reduce((acc, style3) => acc + ";" + style3, "") : ""); let d2 = svgPath.attr("d"); svgPath.attr("d", d2); elem.node().appendChild(svgPath.node()); } else { svgPath = elem.append("path").attr("d", linePath).attr("id", edge.id).attr("class", " " + strokeClasses + (edge.classes ? " " + edge.classes : "")).attr("style", edgeStyles ? edgeStyles.reduce((acc, style3) => acc + ";" + style3, "") : ""); } 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); addEdgeMarkers(svgPath, edge, url, id28, diagramType); let paths = {}; if (pointsHasChanged) { paths.updatedPath = points; } paths.originalPath = edge.points; return paths; }, "insertEdge"); } }); // src/rendering-util/rendering-elements/markers.js var insertMarkers, extension, composition, aggregation, dependency, lollipop, point6, circle2, cross, barb, markers, markers_default; var init_markers = __esm({ "src/rendering-util/rendering-elements/markers.js"() { "use strict"; init_logger(); insertMarkers = /* @__PURE__ */ __name((elem, markerArray, type3, id28) => { markerArray.forEach((markerName) => { markers[markerName](elem, type3, id28); }); }, "insertMarkers"); extension = /* @__PURE__ */ __name((elem, type3, id28) => { log.trace("Making markers for ", id28); elem.append("defs").append("marker").attr("id", id28 + "_" + 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", id28 + "_" + 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"); composition = /* @__PURE__ */ __name((elem, type3, id28) => { elem.append("defs").append("marker").attr("id", id28 + "_" + 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", id28 + "_" + 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"); aggregation = /* @__PURE__ */ __name((elem, type3, id28) => { elem.append("defs").append("marker").attr("id", id28 + "_" + 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", id28 + "_" + 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"); dependency = /* @__PURE__ */ __name((elem, type3, id28) => { elem.append("defs").append("marker").attr("id", id28 + "_" + 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", id28 + "_" + 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"); lollipop = /* @__PURE__ */ __name((elem, type3, id28) => { elem.append("defs").append("marker").attr("id", id28 + "_" + 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", id28 + "_" + 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"); point6 = /* @__PURE__ */ __name((elem, type3, id28) => { elem.append("marker").attr("id", id28 + "_" + 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", id28 + "_" + 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"); }, "point"); circle2 = /* @__PURE__ */ __name((elem, type3, id28) => { elem.append("marker").attr("id", id28 + "_" + 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", id28 + "_" + 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"); cross = /* @__PURE__ */ __name((elem, type3, id28) => { elem.append("marker").attr("id", id28 + "_" + 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", id28 + "_" + 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"); barb = /* @__PURE__ */ __name((elem, type3, id28) => { elem.append("defs").append("marker").attr("id", id28 + "_" + 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"); markers = { extension, composition, aggregation, dependency, lollipop, point: point6, circle: circle2, cross, barb }; 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; } 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, clear6, positionNode; var init_nodes2 = __esm({ "src/rendering-util/rendering-elements/nodes.ts"() { "use strict"; init_logger(); init_shapes(); nodeElems = /* @__PURE__ */ new Map(); __name(insertNode, "insertNode"); setNodeElem = /* @__PURE__ */ __name((elem, node2) => { nodeElems.set(node2.id, elem); }, "setNodeElem"); clear6 = /* @__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 padding2 = 8; const diff2 = node2.diff || 0; if (node2.clusterNode) { el.attr( "transform", "translate(" + (node2.x + diff2 - node2.width / 2) + ", " + (node2.y - node2.height / 2 - padding2) + ")" ); } 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/[email protected]/node_modules/lodash-es/isSymbol.js function isSymbol(value2) { return typeof value2 == "symbol" || isObjectLike_default(value2) && baseGetTag_default(value2) == symbolTag; } var symbolTag, isSymbol_default; var init_isSymbol = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/isSymbol.js"() { "use strict"; init_baseGetTag(); init_isObjectLike(); symbolTag = "[object Symbol]"; __name(isSymbol, "isSymbol"); isSymbol_default = isSymbol; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_arrayMap.js"() { "use strict"; __name(arrayMap, "arrayMap"); arrayMap_default = arrayMap; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_baseToString.js"() { "use strict"; init_Symbol(); init_arrayMap(); init_isArray(); 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/[email protected]/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/[email protected]/node_modules/lodash-es/_trimmedEndIndex.js"() { "use strict"; reWhitespace = /\s/; __name(trimmedEndIndex, "trimmedEndIndex"); trimmedEndIndex_default = trimmedEndIndex; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_baseTrim.js"() { "use strict"; init_trimmedEndIndex(); reTrimStart = /^\s+/; __name(baseTrim, "baseTrim"); baseTrim_default = baseTrim; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/node_modules/lodash-es/toInteger.js"() { "use strict"; init_toFinite(); __name(toInteger, "toInteger"); toInteger_default = toInteger; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_WeakMap.js var WeakMap, WeakMap_default; var init_WeakMap = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_WeakMap.js"() { "use strict"; init_getNative(); init_root(); WeakMap = getNative_default(root_default, "WeakMap"); WeakMap_default = WeakMap; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/noop.js function noop2() { } var noop_default2; var init_noop2 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/noop.js"() { "use strict"; __name(noop2, "noop"); noop_default2 = noop2; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_arrayEach.js"() { "use strict"; __name(arrayEach, "arrayEach"); arrayEach_default = arrayEach; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_baseFindIndex.js"() { "use strict"; __name(baseFindIndex, "baseFindIndex"); baseFindIndex_default = baseFindIndex; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_baseIsNaN.js function baseIsNaN(value2) { return value2 !== value2; } var baseIsNaN_default; var init_baseIsNaN = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_baseIsNaN.js"() { "use strict"; __name(baseIsNaN, "baseIsNaN"); baseIsNaN_default = baseIsNaN; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_strictIndexOf.js"() { "use strict"; __name(strictIndexOf, "strictIndexOf"); strictIndexOf_default = strictIndexOf; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_baseIndexOf.js"() { "use strict"; init_baseFindIndex(); init_baseIsNaN(); init_strictIndexOf(); __name(baseIndexOf, "baseIndexOf"); baseIndexOf_default = baseIndexOf; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_arrayIncludes.js"() { "use strict"; init_baseIndexOf(); __name(arrayIncludes, "arrayIncludes"); arrayIncludes_default = arrayIncludes; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_nativeKeys.js var nativeKeys, nativeKeys_default; var init_nativeKeys = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_nativeKeys.js"() { "use strict"; init_overArg(); nativeKeys = overArg_default(Object.keys, Object); nativeKeys_default = nativeKeys; } }); // ../../node_modules/.pnpm/[email protected]/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 (hasOwnProperty10.call(object3, key) && key != "constructor") { result.push(key); } } return result; } var objectProto12, hasOwnProperty10, baseKeys_default; var init_baseKeys = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_baseKeys.js"() { "use strict"; init_isPrototype(); init_nativeKeys(); objectProto12 = Object.prototype; hasOwnProperty10 = objectProto12.hasOwnProperty; __name(baseKeys, "baseKeys"); baseKeys_default = baseKeys; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/keys.js"() { "use strict"; init_arrayLikeKeys(); init_baseKeys(); init_isArrayLike(); __name(keys, "keys"); keys_default = keys; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/assign.js var objectProto13, hasOwnProperty11, assign, assign_default; var init_assign = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/assign.js"() { "use strict"; init_assignValue(); init_copyObject(); init_createAssigner(); init_isArrayLike(); init_isPrototype(); init_keys(); objectProto13 = Object.prototype; hasOwnProperty11 = objectProto13.hasOwnProperty; assign = createAssigner_default(function(object3, source) { if (isPrototype_default(source) || isArrayLike_default(source)) { copyObject_default(source, keys_default(source), object3); return; } for (var key in source) { if (hasOwnProperty11.call(source, key)) { assignValue_default(object3, key, source[key]); } } }); assign_default = assign; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_isKey.js"() { "use strict"; init_isArray(); init_isSymbol(); reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/; reIsPlainProp = /^\w*$/; __name(isKey, "isKey"); isKey_default = isKey; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_memoizeCapped.js"() { "use strict"; init_memoize(); MAX_MEMOIZE_SIZE = 500; __name(memoizeCapped, "memoizeCapped"); memoizeCapped_default = memoizeCapped; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_stringToPath.js var rePropName, reEscapeChar, stringToPath, stringToPath_default; var init_stringToPath = __esm({ "../../node_modules/.pnpm/[email protected]/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(match2, number7, quote, subString) { result.push(quote ? subString.replace(reEscapeChar, "$1") : number7 || match2); }); return result; }); stringToPath_default = stringToPath; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/toString.js"() { "use strict"; init_baseToString(); __name(toString2, "toString"); toString_default = toString2; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_castPath.js"() { "use strict"; init_isArray(); init_isKey(); init_stringToPath(); init_toString(); __name(castPath, "castPath"); castPath_default = castPath; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_toKey.js"() { "use strict"; init_isSymbol(); INFINITY3 = 1 / 0; __name(toKey, "toKey"); toKey_default = toKey; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_baseGet.js"() { "use strict"; init_castPath(); init_toKey(); __name(baseGet, "baseGet"); baseGet_default = baseGet; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/get.js"() { "use strict"; init_baseGet(); __name(get3, "get"); get_default = get3; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_arrayPush.js function arrayPush(array4, values2) { var index = -1, length2 = values2.length, offset = array4.length; while (++index < length2) { array4[offset + index] = values2[index]; } return array4; } var arrayPush_default; var init_arrayPush = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_arrayPush.js"() { "use strict"; __name(arrayPush, "arrayPush"); arrayPush_default = arrayPush; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_isFlattenable.js"() { "use strict"; init_Symbol(); init_isArguments(); init_isArray(); spreadableSymbol = Symbol_default ? Symbol_default.isConcatSpreadable : void 0; __name(isFlattenable, "isFlattenable"); isFlattenable_default = isFlattenable; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_baseFlatten.js"() { "use strict"; init_arrayPush(); init_isFlattenable(); __name(baseFlatten, "baseFlatten"); baseFlatten_default = baseFlatten; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/flatten.js"() { "use strict"; init_baseFlatten(); __name(flatten, "flatten"); flatten_default = flatten; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_flatRest.js"() { "use strict"; init_flatten(); init_overRest(); init_setToString(); __name(flatRest, "flatRest"); flatRest_default = flatRest; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_baseSlice.js 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; } var baseSlice_default; var init_baseSlice = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_baseSlice.js"() { "use strict"; __name(baseSlice, "baseSlice"); baseSlice_default = baseSlice; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/node_modules/lodash-es/_arrayReduce.js"() { "use strict"; __name(arrayReduce, "arrayReduce"); arrayReduce_default = arrayReduce; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_baseAssign.js"() { "use strict"; init_copyObject(); init_keys(); __name(baseAssign, "baseAssign"); baseAssign_default = baseAssign; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_baseAssignIn.js"() { "use strict"; init_copyObject(); init_keysIn(); __name(baseAssignIn, "baseAssignIn"); baseAssignIn_default = baseAssignIn; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_arrayFilter.js"() { "use strict"; __name(arrayFilter, "arrayFilter"); arrayFilter_default = arrayFilter; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/stubArray.js function stubArray() { return []; } var stubArray_default; var init_stubArray = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/stubArray.js"() { "use strict"; __name(stubArray, "stubArray"); stubArray_default = stubArray; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_getSymbols.js var objectProto14, propertyIsEnumerable2, nativeGetSymbols, getSymbols, getSymbols_default; var init_getSymbols = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_getSymbols.js"() { "use strict"; init_arrayFilter(); init_stubArray(); objectProto14 = Object.prototype; propertyIsEnumerable2 = objectProto14.propertyIsEnumerable; nativeGetSymbols = Object.getOwnPropertySymbols; getSymbols = !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 = getSymbols; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_copySymbols.js"() { "use strict"; init_copyObject(); init_getSymbols(); __name(copySymbols, "copySymbols"); copySymbols_default = copySymbols; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_getSymbolsIn.js var nativeGetSymbols2, getSymbolsIn, getSymbolsIn_default; var init_getSymbolsIn = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_getSymbolsIn.js"() { "use strict"; init_arrayPush(); init_getPrototype(); init_getSymbols(); 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/[email protected]/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/[email protected]/node_modules/lodash-es/_copySymbolsIn.js"() { "use strict"; init_copyObject(); init_getSymbolsIn(); __name(copySymbolsIn, "copySymbolsIn"); copySymbolsIn_default = copySymbolsIn; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_baseGetAllKeys.js"() { "use strict"; init_arrayPush(); init_isArray(); __name(baseGetAllKeys, "baseGetAllKeys"); baseGetAllKeys_default = baseGetAllKeys; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_getAllKeys.js"() { "use strict"; init_baseGetAllKeys(); init_getSymbols(); init_keys(); __name(getAllKeys, "getAllKeys"); getAllKeys_default = getAllKeys; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_getAllKeysIn.js"() { "use strict"; init_baseGetAllKeys(); init_getSymbolsIn(); init_keysIn(); __name(getAllKeysIn, "getAllKeysIn"); getAllKeysIn_default = getAllKeysIn; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_DataView.js var DataView2, DataView_default; var init_DataView = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_DataView.js"() { "use strict"; init_getNative(); init_root(); DataView2 = getNative_default(root_default, "DataView"); DataView_default = DataView2; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_Promise.js var Promise2, Promise_default; var init_Promise = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_Promise.js"() { "use strict"; init_getNative(); init_root(); Promise2 = getNative_default(root_default, "Promise"); Promise_default = Promise2; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_Set.js var Set2, Set_default; var init_Set = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_Set.js"() { "use strict"; init_getNative(); init_root(); Set2 = getNative_default(root_default, "Set"); Set_default = Set2; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_getTag.js var mapTag2, objectTag3, promiseTag, setTag2, weakMapTag2, dataViewTag2, dataViewCtorString, mapCtorString, promiseCtorString, setCtorString, weakMapCtorString, getTag, getTag_default; var init_getTag = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_getTag.js"() { "use strict"; init_DataView(); init_Map(); init_Promise(); init_Set(); init_WeakMap(); init_baseGetTag(); init_toSource(); mapTag2 = "[object Map]"; objectTag3 = "[object Object]"; promiseTag = "[object Promise]"; setTag2 = "[object Set]"; weakMapTag2 = "[object WeakMap]"; dataViewTag2 = "[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); getTag = baseGetTag_default; if (DataView_default && getTag(new DataView_default(new ArrayBuffer(1))) != dataViewTag2 || Map_default && getTag(new Map_default()) != mapTag2 || Promise_default && getTag(Promise_default.resolve()) != promiseTag || Set_default && getTag(new Set_default()) != setTag2 || WeakMap_default && getTag(new WeakMap_default()) != weakMapTag2) { getTag = /* @__PURE__ */ __name(function(value2) { var result = baseGetTag_default(value2), Ctor = result == objectTag3 ? value2.constructor : void 0, ctorString = Ctor ? toSource_default(Ctor) : ""; if (ctorString) { switch (ctorString) { case dataViewCtorString: return dataViewTag2; case mapCtorString: return mapTag2; case promiseCtorString: return promiseTag; case setCtorString: return setTag2; case weakMapCtorString: return weakMapTag2; } } return result; }, "getTag"); } getTag_default = getTag; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_initCloneArray.js function initCloneArray(array4) { var length2 = array4.length, result = new array4.constructor(length2); if (length2 && typeof array4[0] == "string" && hasOwnProperty12.call(array4, "index")) { result.index = array4.index; result.input = array4.input; } return result; } var objectProto15, hasOwnProperty12, initCloneArray_default; var init_initCloneArray = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_initCloneArray.js"() { "use strict"; objectProto15 = Object.prototype; hasOwnProperty12 = objectProto15.hasOwnProperty; __name(initCloneArray, "initCloneArray"); initCloneArray_default = initCloneArray; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_cloneDataView.js"() { "use strict"; init_cloneArrayBuffer(); __name(cloneDataView, "cloneDataView"); cloneDataView_default = cloneDataView; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_cloneRegExp.js"() { "use strict"; reFlags = /\w*$/; __name(cloneRegExp, "cloneRegExp"); cloneRegExp_default = cloneRegExp; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/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/[email protected]/node_modules/lodash-es/_initCloneByTag.js function initCloneByTag(object3, tag2, isDeep) { var Ctor = object3.constructor; switch (tag2) { case arrayBufferTag2: return cloneArrayBuffer_default(object3); case boolTag2: case dateTag2: return new Ctor(+object3); case dataViewTag3: 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 mapTag3: return new Ctor(); case numberTag2: case stringTag2: return new Ctor(object3); case regexpTag2: return cloneRegExp_default(object3); case setTag3: return new Ctor(); case symbolTag2: return cloneSymbol_default(object3); } } var boolTag2, dateTag2, mapTag3, numberTag2, regexpTag2, setTag3, stringTag2, symbolTag2, arrayBufferTag2, dataViewTag3, float32Tag2, float64Tag2, int8Tag2, int16Tag2, int32Tag2, uint8Tag2, uint8ClampedTag2, uint16Tag2, uint32Tag2, initCloneByTag_default; var init_initCloneByTag = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_initCloneByTag.js"() { "use strict"; init_cloneArrayBuffer(); init_cloneDataView(); init_cloneRegExp(); init_cloneSymbol(); init_cloneTypedArray(); boolTag2 = "[object Boolean]"; dateTag2 = "[object Date]"; mapTag3 = "[object Map]"; numberTag2 = "[object Number]"; regexpTag2 = "[object RegExp]"; setTag3 = "[object Set]"; stringTag2 = "[object String]"; symbolTag2 = "[object Symbol]"; arrayBufferTag2 = "[object ArrayBuffer]"; dataViewTag3 = "[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/[email protected]/node_modules/lodash-es/_baseIsMap.js function baseIsMap(value2) { return isObjectLike_default(value2) && getTag_default(value2) == mapTag4; } var mapTag4, baseIsMap_default; var init_baseIsMap = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_baseIsMap.js"() { "use strict"; init_getTag(); init_isObjectLike(); mapTag4 = "[object Map]"; __name(baseIsMap, "baseIsMap"); baseIsMap_default = baseIsMap; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/isMap.js var nodeIsMap, isMap, isMap_default; var init_isMap = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_baseIsSet.js function baseIsSet(value2) { return isObjectLike_default(value2) && getTag_default(value2) == setTag4; } var setTag4, baseIsSet_default; var init_baseIsSet = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_baseIsSet.js"() { "use strict"; init_getTag(); init_isObjectLike(); setTag4 = "[object Set]"; __name(baseIsSet, "baseIsSet"); baseIsSet_default = baseIsSet; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/isSet.js var nodeIsSet, isSet, isSet_default; var init_isSet = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/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 tag2 = getTag_default(value2), isFunc = tag2 == funcTag3 || tag2 == genTag2; if (isBuffer_default(value2)) { return cloneBuffer_default(value2, isDeep); } if (tag2 == objectTag4 || tag2 == 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[tag2]) { return object3 ? value2 : {}; } result = initCloneByTag_default(value2, tag2, 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, arrayTag2, boolTag3, dateTag3, errorTag2, funcTag3, genTag2, mapTag5, numberTag3, objectTag4, regexpTag3, setTag5, stringTag3, symbolTag3, weakMapTag3, arrayBufferTag3, dataViewTag4, float32Tag3, float64Tag3, int8Tag3, int16Tag3, int32Tag3, uint8Tag3, uint8ClampedTag3, uint16Tag3, uint32Tag3, cloneableTags, baseClone_default; var init_baseClone = __esm({ "../../node_modules/.pnpm/[email protected]/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_getTag(); init_initCloneArray(); init_initCloneByTag(); init_initCloneObject(); init_isArray(); 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]"; arrayTag2 = "[object Array]"; boolTag3 = "[object Boolean]"; dateTag3 = "[object Date]"; errorTag2 = "[object Error]"; funcTag3 = "[object Function]"; genTag2 = "[object GeneratorFunction]"; mapTag5 = "[object Map]"; numberTag3 = "[object Number]"; objectTag4 = "[object Object]"; regexpTag3 = "[object RegExp]"; setTag5 = "[object Set]"; stringTag3 = "[object String]"; symbolTag3 = "[object Symbol]"; weakMapTag3 = "[object WeakMap]"; arrayBufferTag3 = "[object ArrayBuffer]"; dataViewTag4 = "[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[arrayTag2] = cloneableTags[arrayBufferTag3] = cloneableTags[dataViewTag4] = cloneableTags[boolTag3] = cloneableTags[dateTag3] = cloneableTags[float32Tag3] = cloneableTags[float64Tag3] = cloneableTags[int8Tag3] = cloneableTags[int16Tag3] = cloneableTags[int32Tag3] = cloneableTags[mapTag5] = cloneableTags[numberTag3] = cloneableTags[objectTag4] = cloneableTags[regexpTag3] = cloneableTags[setTag5] = cloneableTags[stringTag3] = cloneableTags[symbolTag3] = 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/[email protected]/node_modules/lodash-es/clone.js function clone(value2) { return baseClone_default(value2, CLONE_SYMBOLS_FLAG2); } var CLONE_SYMBOLS_FLAG2, clone_default2; var init_clone2 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/clone.js"() { "use strict"; init_baseClone(); CLONE_SYMBOLS_FLAG2 = 4; __name(clone, "clone"); clone_default2 = clone; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/cloneDeep.js function cloneDeep(value2) { return baseClone_default(value2, CLONE_DEEP_FLAG2 | CLONE_SYMBOLS_FLAG3); } var CLONE_DEEP_FLAG2, CLONE_SYMBOLS_FLAG3, cloneDeep_default; var init_cloneDeep = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/cloneDeep.js"() { "use strict"; init_baseClone(); CLONE_DEEP_FLAG2 = 1; CLONE_SYMBOLS_FLAG3 = 4; __name(cloneDeep, "cloneDeep"); cloneDeep_default = cloneDeep; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/compact.js 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; } var compact_default; var init_compact = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/compact.js"() { "use strict"; __name(compact, "compact"); compact_default = compact; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_setCacheAdd.js"() { "use strict"; HASH_UNDEFINED3 = "__lodash_hash_undefined__"; __name(setCacheAdd, "setCacheAdd"); setCacheAdd_default = setCacheAdd; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_setCacheHas.js function setCacheHas(value2) { return this.__data__.has(value2); } var setCacheHas_default; var init_setCacheHas = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_setCacheHas.js"() { "use strict"; __name(setCacheHas, "setCacheHas"); setCacheHas_default = setCacheHas; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_SetCache.js function SetCache(values2) { var index = -1, length2 = values2 == null ? 0 : values2.length; this.__data__ = new MapCache_default(); while (++index < length2) { this.add(values2[index]); } } var SetCache_default; var init_SetCache = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/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/[email protected]/node_modules/lodash-es/_arraySome.js"() { "use strict"; __name(arraySome, "arraySome"); arraySome_default = arraySome; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_cacheHas.js function cacheHas(cache3, key) { return cache3.has(key); } var cacheHas_default; var init_cacheHas = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_cacheHas.js"() { "use strict"; __name(cacheHas, "cacheHas"); cacheHas_default = cacheHas; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/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/[email protected]/node_modules/lodash-es/_mapToArray.js function mapToArray(map5) { var index = -1, result = Array(map5.size); map5.forEach(function(value2, key) { result[++index] = [key, value2]; }); return result; } var mapToArray_default; var init_mapToArray = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_mapToArray.js"() { "use strict"; __name(mapToArray, "mapToArray"); mapToArray_default = mapToArray; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_setToArray.js function setToArray(set6) { var index = -1, result = Array(set6.size); set6.forEach(function(value2) { result[++index] = value2; }); return result; } var setToArray_default; var init_setToArray = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_setToArray.js"() { "use strict"; __name(setToArray, "setToArray"); setToArray_default = setToArray; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_equalByTag.js function equalByTag(object3, other, tag2, bitmask, customizer, equalFunc, stack) { switch (tag2) { case dataViewTag5: if (object3.byteLength != other.byteLength || object3.byteOffset != other.byteOffset) { return false; } object3 = object3.buffer; other = other.buffer; case arrayBufferTag4: if (object3.byteLength != other.byteLength || !equalFunc(new Uint8Array_default(object3), new Uint8Array_default(other))) { return false; } return true; case boolTag4: case dateTag4: case numberTag4: return eq_default(+object3, +other); case errorTag3: return object3.name == other.name && object3.message == other.message; case regexpTag4: case stringTag4: return object3 == other + ""; case mapTag6: var convert = mapToArray_default; case setTag6: 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 symbolTag4: if (symbolValueOf2) { return symbolValueOf2.call(object3) == symbolValueOf2.call(other); } } return false; } var COMPARE_PARTIAL_FLAG2, COMPARE_UNORDERED_FLAG2, boolTag4, dateTag4, errorTag3, mapTag6, numberTag4, regexpTag4, setTag6, stringTag4, symbolTag4, arrayBufferTag4, dataViewTag5, symbolProto3, symbolValueOf2, equalByTag_default; var init_equalByTag = __esm({ "../../node_modules/.pnpm/[email protected]/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]"; dateTag4 = "[object Date]"; errorTag3 = "[object Error]"; mapTag6 = "[object Map]"; numberTag4 = "[object Number]"; regexpTag4 = "[object RegExp]"; setTag6 = "[object Set]"; stringTag4 = "[object String]"; symbolTag4 = "[object Symbol]"; arrayBufferTag4 = "[object ArrayBuffer]"; dataViewTag5 = "[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/[email protected]/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 : hasOwnProperty13.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, objectProto16, hasOwnProperty13, equalObjects_default; var init_equalObjects = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_equalObjects.js"() { "use strict"; init_getAllKeys(); COMPARE_PARTIAL_FLAG3 = 1; objectProto16 = Object.prototype; hasOwnProperty13 = objectProto16.hasOwnProperty; __name(equalObjects, "equalObjects"); equalObjects_default = equalObjects; } }); // ../../node_modules/.pnpm/[email protected]/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 ? arrayTag3 : getTag_default(object3), othTag = othIsArr ? arrayTag3 : getTag_default(other); objTag = objTag == argsTag4 ? objectTag5 : objTag; othTag = othTag == argsTag4 ? objectTag5 : othTag; var objIsObj = objTag == objectTag5, othIsObj = othTag == objectTag5, 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 && hasOwnProperty14.call(object3, "__wrapped__"), othIsWrapped = othIsObj && hasOwnProperty14.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, arrayTag3, objectTag5, objectProto17, hasOwnProperty14, baseIsEqualDeep_default; var init_baseIsEqualDeep = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_baseIsEqualDeep.js"() { "use strict"; init_Stack(); init_equalArrays(); init_equalByTag(); init_equalObjects(); init_getTag(); init_isArray(); init_isBuffer(); init_isTypedArray(); COMPARE_PARTIAL_FLAG4 = 1; argsTag4 = "[object Arguments]"; arrayTag3 = "[object Array]"; objectTag5 = "[object Object]"; objectProto17 = Object.prototype; hasOwnProperty14 = objectProto17.hasOwnProperty; __name(baseIsEqualDeep, "baseIsEqualDeep"); baseIsEqualDeep_default = baseIsEqualDeep; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_baseIsEqual.js"() { "use strict"; init_baseIsEqualDeep(); init_isObjectLike(); __name(baseIsEqual, "baseIsEqual"); baseIsEqual_default = baseIsEqual; } }); // ../../node_modules/.pnpm/[email protected]/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 data5 = matchData[index]; if (noCustomizer && data5[2] ? data5[1] !== object3[data5[0]] : !(data5[0] in object3)) { return false; } } while (++index < length2) { data5 = matchData[index]; var key = data5[0], objValue = object3[key], srcValue = data5[1]; if (noCustomizer && data5[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/[email protected]/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/[email protected]/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/[email protected]/node_modules/lodash-es/_isStrictComparable.js"() { "use strict"; init_isObject(); __name(isStrictComparable, "isStrictComparable"); isStrictComparable_default = isStrictComparable; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_getMatchData.js"() { "use strict"; init_isStrictComparable(); init_keys(); __name(getMatchData, "getMatchData"); getMatchData_default = getMatchData; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_matchesStrictComparable.js"() { "use strict"; __name(matchesStrictComparable, "matchesStrictComparable"); matchesStrictComparable_default = matchesStrictComparable; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_baseMatches.js"() { "use strict"; init_baseIsMatch(); init_getMatchData(); init_matchesStrictComparable(); __name(baseMatches, "baseMatches"); baseMatches_default = baseMatches; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_baseHasIn.js"() { "use strict"; __name(baseHasIn, "baseHasIn"); baseHasIn_default = baseHasIn; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_hasPath.js"() { "use strict"; init_castPath(); init_isArguments(); init_isArray(); init_isIndex(); init_isLength(); init_toKey(); __name(hasPath, "hasPath"); hasPath_default = hasPath; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/hasIn.js"() { "use strict"; init_baseHasIn(); init_hasPath(); __name(hasIn, "hasIn"); hasIn_default = hasIn; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/node_modules/lodash-es/_baseProperty.js"() { "use strict"; __name(baseProperty, "baseProperty"); baseProperty_default = baseProperty; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_basePropertyDeep.js"() { "use strict"; init_baseGet(); __name(basePropertyDeep, "basePropertyDeep"); basePropertyDeep_default = basePropertyDeep; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/node_modules/lodash-es/_baseIteratee.js"() { "use strict"; init_baseMatches(); init_baseMatchesProperty(); init_identity4(); init_isArray(); init_property2(); __name(baseIteratee, "baseIteratee"); baseIteratee_default = baseIteratee; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_arrayAggregator.js 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; } var arrayAggregator_default; var init_arrayAggregator = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_arrayAggregator.js"() { "use strict"; __name(arrayAggregator, "arrayAggregator"); arrayAggregator_default = arrayAggregator; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_baseForOwn.js"() { "use strict"; init_baseFor(); init_keys(); __name(baseForOwn, "baseForOwn"); baseForOwn_default = baseForOwn; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_createBaseEach.js"() { "use strict"; init_isArrayLike(); __name(createBaseEach, "createBaseEach"); createBaseEach_default = createBaseEach; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_baseEach.js var baseEach, baseEach_default; var init_baseEach = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_baseEach.js"() { "use strict"; init_baseForOwn(); init_createBaseEach(); baseEach = createBaseEach_default(baseForOwn_default); baseEach_default = baseEach; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_baseAggregator.js function baseAggregator(collection4, setter, iteratee, accumulator) { baseEach_default(collection4, function(value2, key, collection5) { setter(accumulator, value2, iteratee(value2), collection5); }); return accumulator; } var baseAggregator_default; var init_baseAggregator = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_baseAggregator.js"() { "use strict"; init_baseEach(); __name(baseAggregator, "baseAggregator"); baseAggregator_default = baseAggregator; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_createAggregator.js function createAggregator(setter, initializer) { return function(collection4, iteratee) { var func = isArray_default(collection4) ? arrayAggregator_default : baseAggregator_default, accumulator = initializer ? initializer() : {}; return func(collection4, setter, baseIteratee_default(iteratee, 2), accumulator); }; } var createAggregator_default; var init_createAggregator = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_createAggregator.js"() { "use strict"; init_arrayAggregator(); init_baseAggregator(); init_baseIteratee(); init_isArray(); __name(createAggregator, "createAggregator"); createAggregator_default = createAggregator; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/now.js var now2, now_default; var init_now = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/defaults.js var objectProto18, hasOwnProperty15, defaults, defaults_default; var init_defaults3 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/defaults.js"() { "use strict"; init_baseRest(); init_eq(); init_isIterateeCall(); init_keysIn(); objectProto18 = Object.prototype; hasOwnProperty15 = objectProto18.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, objectProto18[key]) && !hasOwnProperty15.call(object3, key)) { object3[key] = source[key]; } } } return object3; }); defaults_default = defaults; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_arrayIncludesWith.js"() { "use strict"; __name(arrayIncludesWith, "arrayIncludesWith"); arrayIncludesWith_default = arrayIncludesWith; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_baseDifference.js function baseDifference(array4, values2, iteratee, comparator) { var index = -1, includes3 = arrayIncludes_default, isCommon2 = true, length2 = array4.length, result = [], valuesLength = values2.length; if (!length2) { return result; } if (iteratee) { values2 = arrayMap_default(values2, baseUnary_default(iteratee)); } if (comparator) { includes3 = arrayIncludesWith_default; isCommon2 = false; } else if (values2.length >= LARGE_ARRAY_SIZE2) { includes3 = cacheHas_default; isCommon2 = false; values2 = new SetCache_default(values2); } outer: while (++index < length2) { var value2 = array4[index], computed = iteratee == null ? value2 : iteratee(value2); value2 = comparator || value2 !== 0 ? value2 : 0; if (isCommon2 && computed === computed) { var valuesIndex = valuesLength; while (valuesIndex--) { if (values2[valuesIndex] === computed) { continue outer; } } result.push(value2); } else if (!includes3(values2, computed, comparator)) { result.push(value2); } } return result; } var LARGE_ARRAY_SIZE2, baseDifference_default; var init_baseDifference = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_baseDifference.js"() { "use strict"; init_SetCache(); init_arrayIncludes(); init_arrayIncludesWith(); init_arrayMap(); init_baseUnary(); init_cacheHas(); LARGE_ARRAY_SIZE2 = 200; __name(baseDifference, "baseDifference"); baseDifference_default = baseDifference; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/difference.js var difference, difference_default; var init_difference = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/difference.js"() { "use strict"; init_baseDifference(); init_baseFlatten(); init_baseRest(); init_isArrayLikeObject(); difference = baseRest_default(function(array4, values2) { return isArrayLikeObject_default(array4) ? baseDifference_default(array4, baseFlatten_default(values2, 1, isArrayLikeObject_default, true)) : []; }); difference_default = difference; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/last.js"() { "use strict"; __name(last, "last"); last_default = last; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/drop.js function drop(array4, n2, guard) { var length2 = array4 == null ? 0 : array4.length; if (!length2) { return []; } n2 = guard || n2 === void 0 ? 1 : toInteger_default(n2); return baseSlice_default(array4, n2 < 0 ? 0 : n2, length2); } var drop_default; var init_drop = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/drop.js"() { "use strict"; init_baseSlice(); init_toInteger(); __name(drop, "drop"); drop_default = drop; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/dropRight.js function dropRight(array4, n2, guard) { var length2 = array4 == null ? 0 : array4.length; if (!length2) { return []; } n2 = guard || n2 === void 0 ? 1 : toInteger_default(n2); n2 = length2 - n2; return baseSlice_default(array4, 0, n2 < 0 ? 0 : n2); } var dropRight_default; var init_dropRight = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/dropRight.js"() { "use strict"; init_baseSlice(); init_toInteger(); __name(dropRight, "dropRight"); dropRight_default = dropRight; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_castFunction.js"() { "use strict"; init_identity4(); __name(castFunction, "castFunction"); castFunction_default = castFunction; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/forEach.js"() { "use strict"; init_arrayEach(); init_baseEach(); init_castFunction(); init_isArray(); __name(forEach, "forEach"); forEach_default = forEach; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/each.js var init_each2 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/each.js"() { "use strict"; init_forEach(); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_arrayEvery.js 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; } var arrayEvery_default; var init_arrayEvery = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_arrayEvery.js"() { "use strict"; __name(arrayEvery, "arrayEvery"); arrayEvery_default = arrayEvery; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_baseEvery.js function baseEvery(collection4, predicate) { var result = true; baseEach_default(collection4, function(value2, index, collection5) { result = !!predicate(value2, index, collection5); return result; }); return result; } var baseEvery_default; var init_baseEvery = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_baseEvery.js"() { "use strict"; init_baseEach(); __name(baseEvery, "baseEvery"); baseEvery_default = baseEvery; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/every.js function every(collection4, predicate, guard) { var func = isArray_default(collection4) ? arrayEvery_default : baseEvery_default; if (guard && isIterateeCall_default(collection4, predicate, guard)) { predicate = void 0; } return func(collection4, baseIteratee_default(predicate, 3)); } var every_default; var init_every = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/every.js"() { "use strict"; init_arrayEvery(); init_baseEvery(); init_baseIteratee(); init_isArray(); init_isIterateeCall(); __name(every, "every"); every_default = every; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_baseFilter.js"() { "use strict"; init_baseEach(); __name(baseFilter, "baseFilter"); baseFilter_default = baseFilter; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/filter.js"() { "use strict"; init_arrayFilter(); init_baseFilter(); init_baseIteratee(); init_isArray(); __name(filter2, "filter"); filter_default3 = filter2; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_createFind.js"() { "use strict"; init_baseIteratee(); init_isArrayLike(); init_keys(); __name(createFind, "createFind"); createFind_default = createFind; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/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/[email protected]/node_modules/lodash-es/find.js var find2, find_default; var init_find = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/find.js"() { "use strict"; init_createFind(); init_findIndex(); find2 = createFind_default(findIndex_default); find_default = find2; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/head.js function head(array4) { return array4 && array4.length ? array4[0] : void 0; } var head_default; var init_head = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/head.js"() { "use strict"; __name(head, "head"); head_default = head; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/first.js var init_first = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/first.js"() { "use strict"; init_head(); } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_baseMap.js"() { "use strict"; init_baseEach(); init_isArrayLike(); __name(baseMap, "baseMap"); baseMap_default = baseMap; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/map.js"() { "use strict"; init_arrayMap(); init_baseIteratee(); init_baseMap(); init_isArray(); __name(map3, "map"); map_default = map3; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/flatMap.js function flatMap(collection4, iteratee) { return baseFlatten_default(map_default(collection4, iteratee), 1); } var flatMap_default; var init_flatMap = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/flatMap.js"() { "use strict"; init_baseFlatten(); init_map(); __name(flatMap, "flatMap"); flatMap_default = flatMap; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/forIn.js"() { "use strict"; init_baseFor(); init_castFunction(); init_keysIn(); __name(forIn, "forIn"); forIn_default = forIn; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/forOwn.js"() { "use strict"; init_baseForOwn(); init_castFunction(); __name(forOwn, "forOwn"); forOwn_default = forOwn; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/groupBy.js var objectProto19, hasOwnProperty16, groupBy, groupBy_default; var init_groupBy = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/groupBy.js"() { "use strict"; init_baseAssignValue(); init_createAggregator(); objectProto19 = Object.prototype; hasOwnProperty16 = objectProto19.hasOwnProperty; groupBy = createAggregator_default(function(result, value2, key) { if (hasOwnProperty16.call(result, key)) { result[key].push(value2); } else { baseAssignValue_default(result, key, [value2]); } }); groupBy_default = groupBy; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_baseGt.js function baseGt(value2, other) { return value2 > other; } var baseGt_default; var init_baseGt = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_baseGt.js"() { "use strict"; __name(baseGt, "baseGt"); baseGt_default = baseGt; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_baseHas.js function baseHas(object3, key) { return object3 != null && hasOwnProperty17.call(object3, key); } var objectProto20, hasOwnProperty17, baseHas_default; var init_baseHas = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_baseHas.js"() { "use strict"; objectProto20 = Object.prototype; hasOwnProperty17 = objectProto20.hasOwnProperty; __name(baseHas, "baseHas"); baseHas_default = baseHas; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/has.js"() { "use strict"; init_baseHas(); init_hasPath(); __name(has, "has"); has_default = has; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/isString.js function isString(value2) { return typeof value2 == "string" || !isArray_default(value2) && isObjectLike_default(value2) && baseGetTag_default(value2) == stringTag5; } var stringTag5, isString_default; var init_isString = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/isString.js"() { "use strict"; init_baseGetTag(); init_isArray(); init_isObjectLike(); stringTag5 = "[object String]"; __name(isString, "isString"); isString_default = isString; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_baseValues.js"() { "use strict"; init_arrayMap(); __name(baseValues, "baseValues"); baseValues_default = baseValues; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/values.js"() { "use strict"; init_baseValues(); init_keys(); __name(values, "values"); values_default = values; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/includes.js function includes(collection4, value2, fromIndex, guard) { collection4 = isArrayLike_default(collection4) ? collection4 : values_default(collection4); fromIndex = fromIndex && !guard ? toInteger_default(fromIndex) : 0; var length2 = collection4.length; if (fromIndex < 0) { fromIndex = nativeMax3(length2 + fromIndex, 0); } return isString_default(collection4) ? fromIndex <= length2 && collection4.indexOf(value2, fromIndex) > -1 : !!length2 && baseIndexOf_default(collection4, value2, fromIndex) > -1; } var nativeMax3, includes_default; var init_includes = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/includes.js"() { "use strict"; init_baseIndexOf(); init_isArrayLike(); init_isString(); init_toInteger(); init_values(); nativeMax3 = Math.max; __name(includes, "includes"); includes_default = includes; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/indexOf.js function indexOf(array4, value2, fromIndex) { var length2 = array4 == null ? 0 : array4.length; if (!length2) { return -1; } var index = fromIndex == null ? 0 : toInteger_default(fromIndex); if (index < 0) { index = nativeMax4(length2 + index, 0); } return baseIndexOf_default(array4, value2, index); } var nativeMax4, indexOf_default; var init_indexOf = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/indexOf.js"() { "use strict"; init_baseIndexOf(); init_toInteger(); nativeMax4 = Math.max; __name(indexOf, "indexOf"); indexOf_default = indexOf; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/isEmpty.js function isEmpty(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 tag2 = getTag_default(value2); if (tag2 == mapTag7 || tag2 == setTag7) { return !value2.size; } if (isPrototype_default(value2)) { return !baseKeys_default(value2).length; } for (var key in value2) { if (hasOwnProperty18.call(value2, key)) { return false; } } return true; } var mapTag7, setTag7, objectProto21, hasOwnProperty18, isEmpty_default; var init_isEmpty = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/isEmpty.js"() { "use strict"; init_baseKeys(); init_getTag(); init_isArguments(); init_isArray(); init_isArrayLike(); init_isBuffer(); init_isPrototype(); init_isTypedArray(); mapTag7 = "[object Map]"; setTag7 = "[object Set]"; objectProto21 = Object.prototype; hasOwnProperty18 = objectProto21.hasOwnProperty; __name(isEmpty, "isEmpty"); isEmpty_default = isEmpty; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_baseIsRegExp.js function baseIsRegExp(value2) { return isObjectLike_default(value2) && baseGetTag_default(value2) == regexpTag5; } var regexpTag5, baseIsRegExp_default; var init_baseIsRegExp = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_baseIsRegExp.js"() { "use strict"; init_baseGetTag(); init_isObjectLike(); regexpTag5 = "[object RegExp]"; __name(baseIsRegExp, "baseIsRegExp"); baseIsRegExp_default = baseIsRegExp; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/isRegExp.js var nodeIsRegExp, isRegExp, isRegExp_default; var init_isRegExp = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/isRegExp.js"() { "use strict"; init_baseIsRegExp(); init_baseUnary(); init_nodeUtil(); nodeIsRegExp = nodeUtil_default && nodeUtil_default.isRegExp; isRegExp = nodeIsRegExp ? baseUnary_default(nodeIsRegExp) : baseIsRegExp_default; isRegExp_default = isRegExp; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/isUndefined.js function isUndefined(value2) { return value2 === void 0; } var isUndefined_default; var init_isUndefined = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/isUndefined.js"() { "use strict"; __name(isUndefined, "isUndefined"); isUndefined_default = isUndefined; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_baseLt.js function baseLt(value2, other) { return value2 < other; } var baseLt_default; var init_baseLt = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_baseLt.js"() { "use strict"; __name(baseLt, "baseLt"); baseLt_default = baseLt; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/mapValues.js"() { "use strict"; init_baseAssignValue(); init_baseForOwn(); init_baseIteratee(); __name(mapValues, "mapValues"); mapValues_default = mapValues; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_baseExtremum.js"() { "use strict"; init_isSymbol(); __name(baseExtremum, "baseExtremum"); baseExtremum_default = baseExtremum; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/max.js"() { "use strict"; init_baseExtremum(); init_baseGt(); init_identity4(); __name(max4, "max"); max_default = max4; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/min.js"() { "use strict"; init_baseExtremum(); init_baseLt(); init_identity4(); __name(min4, "min"); min_default = min4; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/minBy.js"() { "use strict"; init_baseExtremum(); init_baseIteratee(); init_baseLt(); __name(minBy, "minBy"); minBy_default = minBy; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/negate.js function negate(predicate) { if (typeof predicate != "function") { throw new TypeError(FUNC_ERROR_TEXT2); } 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); }; } var FUNC_ERROR_TEXT2, negate_default; var init_negate = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/negate.js"() { "use strict"; FUNC_ERROR_TEXT2 = "Expected a function"; __name(negate, "negate"); negate_default = negate; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/node_modules/lodash-es/_basePickBy.js"() { "use strict"; init_baseGet(); init_baseSet(); init_castPath(); __name(basePickBy, "basePickBy"); basePickBy_default = basePickBy; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/pickBy.js function pickBy(object3, predicate) { if (object3 == null) { return {}; } var props = arrayMap_default(getAllKeysIn_default(object3), function(prop) { return [prop]; }); predicate = baseIteratee_default(predicate); return basePickBy_default(object3, props, function(value2, path4) { return predicate(value2, path4[0]); }); } var pickBy_default; var init_pickBy = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/pickBy.js"() { "use strict"; init_arrayMap(); init_baseIteratee(); init_basePickBy(); init_getAllKeysIn(); __name(pickBy, "pickBy"); pickBy_default = pickBy; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_baseSortBy.js"() { "use strict"; __name(baseSortBy, "baseSortBy"); baseSortBy_default = baseSortBy; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_compareAscending.js"() { "use strict"; init_isSymbol(); __name(compareAscending, "compareAscending"); compareAscending_default = compareAscending; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_compareMultiple.js"() { "use strict"; init_compareAscending(); __name(compareMultiple, "compareMultiple"); compareMultiple_default = compareMultiple; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/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_isArray(); __name(baseOrderBy, "baseOrderBy"); baseOrderBy_default = baseOrderBy; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_asciiSize.js var asciiSize, asciiSize_default; var init_asciiSize = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_asciiSize.js"() { "use strict"; init_baseProperty(); asciiSize = baseProperty_default("length"); asciiSize_default = asciiSize; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/node_modules/lodash-es/_stringSize.js"() { "use strict"; init_asciiSize(); init_hasUnicode(); init_unicodeSize(); __name(stringSize, "stringSize"); stringSize_default = stringSize; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_basePick.js"() { "use strict"; init_basePickBy(); init_hasIn(); __name(basePick, "basePick"); basePick_default = basePick; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/pick.js var pick, pick_default; var init_pick = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_baseRange.js function baseRange(start3, end2, step3, fromRight) { var index = -1, length2 = nativeMax5(nativeCeil((end2 - start3) / (step3 || 1)), 0), result = Array(length2); while (length2--) { result[fromRight ? length2 : ++index] = start3; start3 += step3; } return result; } var nativeCeil, nativeMax5, baseRange_default; var init_baseRange = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_baseRange.js"() { "use strict"; nativeCeil = Math.ceil; nativeMax5 = Math.max; __name(baseRange, "baseRange"); baseRange_default = baseRange; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_createRange.js"() { "use strict"; init_baseRange(); init_isIterateeCall(); init_toFinite(); __name(createRange, "createRange"); createRange_default = createRange; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/range.js var range2, range_default; var init_range2 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/range.js"() { "use strict"; init_createRange(); range2 = createRange_default(); range_default = range2; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_baseReduce.js"() { "use strict"; __name(baseReduce, "baseReduce"); baseReduce_default = baseReduce; } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/reduce.js"() { "use strict"; init_arrayReduce(); init_baseEach(); init_baseIteratee(); init_baseReduce(); init_isArray(); __name(reduce, "reduce"); reduce_default = reduce; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/reject.js function reject(collection4, predicate) { var func = isArray_default(collection4) ? arrayFilter_default : baseFilter_default; return func(collection4, negate_default(baseIteratee_default(predicate, 3))); } var reject_default; var init_reject = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/reject.js"() { "use strict"; init_arrayFilter(); init_baseFilter(); init_baseIteratee(); init_isArray(); init_negate(); __name(reject, "reject"); reject_default = reject; } }); // ../../node_modules/.pnpm/[email protected]/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 tag2 = getTag_default(collection4); if (tag2 == mapTag8 || tag2 == setTag8) { return collection4.size; } return baseKeys_default(collection4).length; } var mapTag8, setTag8, size_default2; var init_size3 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/size.js"() { "use strict"; init_baseKeys(); init_getTag(); init_isArrayLike(); init_isString(); init_stringSize(); mapTag8 = "[object Map]"; setTag8 = "[object Set]"; __name(size, "size"); size_default2 = size; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_baseSome.js function baseSome(collection4, predicate) { var result; baseEach_default(collection4, function(value2, index, collection5) { result = predicate(value2, index, collection5); return !result; }); return !!result; } var baseSome_default; var init_baseSome = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_baseSome.js"() { "use strict"; init_baseEach(); __name(baseSome, "baseSome"); baseSome_default = baseSome; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/some.js function some(collection4, predicate, guard) { var func = isArray_default(collection4) ? arraySome_default : baseSome_default; if (guard && isIterateeCall_default(collection4, predicate, guard)) { predicate = void 0; } return func(collection4, baseIteratee_default(predicate, 3)); } var some_default; var init_some = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/some.js"() { "use strict"; init_arraySome(); init_baseIteratee(); init_baseSome(); init_isArray(); init_isIterateeCall(); __name(some, "some"); some_default = some; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/sortBy.js var sortBy, sortBy_default; var init_sortBy = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/lodash-es/_createSet.js var INFINITY4, createSet, createSet_default; var init_createSet = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_createSet.js"() { "use strict"; init_Set(); init_noop2(); init_setToArray(); INFINITY4 = 1 / 0; createSet = !(Set_default && 1 / setToArray_default(new Set_default([, -0]))[1] == INFINITY4) ? noop_default2 : function(values2) { return new Set_default(values2); }; createSet_default = createSet; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_baseUniq.js function baseUniq(array4, iteratee, comparator) { var index = -1, includes3 = arrayIncludes_default, length2 = array4.length, isCommon2 = true, result = [], seen = result; if (comparator) { isCommon2 = false; includes3 = arrayIncludesWith_default; } else if (length2 >= LARGE_ARRAY_SIZE3) { var set6 = iteratee ? null : createSet_default(array4); if (set6) { return setToArray_default(set6); } isCommon2 = 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 (isCommon2 && 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_SIZE3, baseUniq_default; var init_baseUniq = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_baseUniq.js"() { "use strict"; init_SetCache(); init_arrayIncludes(); init_arrayIncludesWith(); init_cacheHas(); init_createSet(); init_setToArray(); LARGE_ARRAY_SIZE3 = 200; __name(baseUniq, "baseUniq"); baseUniq_default = baseUniq; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/union.js var union, union_default; var init_union = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/union.js"() { "use strict"; init_baseFlatten(); init_baseRest(); init_baseUniq(); init_isArrayLikeObject(); union = baseRest_default(function(arrays) { return baseUniq_default(baseFlatten_default(arrays, 1, isArrayLikeObject_default, true)); }); union_default = union; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/uniq.js function uniq(array4) { return array4 && array4.length ? baseUniq_default(array4) : []; } var uniq_default; var init_uniq = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/uniq.js"() { "use strict"; init_baseUniq(); __name(uniq, "uniq"); uniq_default = uniq; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/uniqBy.js function uniqBy(array4, iteratee) { return array4 && array4.length ? baseUniq_default(array4, baseIteratee_default(iteratee, 2)) : []; } var uniqBy_default; var init_uniqBy = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/uniqBy.js"() { "use strict"; init_baseIteratee(); init_baseUniq(); __name(uniqBy, "uniqBy"); uniqBy_default = uniqBy; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/uniqueId.js function uniqueId(prefix) { var id28 = ++idCounter; return toString_default(prefix) + id28; } var idCounter, uniqueId_default; var init_uniqueId = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/uniqueId.js"() { "use strict"; init_toString(); idCounter = 0; __name(uniqueId, "uniqueId"); uniqueId_default = uniqueId; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_baseZipObject.js function baseZipObject(props, values2, assignFunc) { var index = -1, length2 = props.length, valsLength = values2.length, result = {}; while (++index < length2) { var value2 = index < valsLength ? values2[index] : void 0; assignFunc(result, props[index], value2); } return result; } var baseZipObject_default; var init_baseZipObject = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/_baseZipObject.js"() { "use strict"; __name(baseZipObject, "baseZipObject"); baseZipObject_default = baseZipObject; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/zipObject.js function zipObject(props, values2) { return baseZipObject_default(props || [], values2 || [], assignValue_default); } var zipObject_default; var init_zipObject = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/zipObject.js"() { "use strict"; init_assignValue(); init_baseZipObject(); __name(zipObject, "zipObject"); zipObject_default = zipObject; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/lodash.js var init_lodash = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/lodash-es/lodash.js"() { "use strict"; init_assign(); init_clone2(); init_cloneDeep(); init_compact(); init_constant7(); init_defaults3(); init_difference(); init_drop(); init_dropRight(); init_each2(); init_every(); init_filter3(); init_find(); init_first(); init_flatMap(); init_flatten(); init_forEach(); init_forIn(); init_forOwn(); init_groupBy(); init_has(); init_identity4(); init_includes(); init_indexOf(); init_isArray(); init_isEmpty(); init_isFunction(); init_isObject(); init_isRegExp(); init_isString(); init_isUndefined(); init_keys(); init_last(); init_map(); init_mapValues(); init_max2(); init_merge4(); init_min2(); init_minBy(); init_noop2(); init_now(); init_pick(); init_pickBy(); init_range2(); init_reduce(); init_reject(); init_size3(); init_some(); init_sortBy(); init_union(); init_uniq(); init_uniqueId(); init_values(); init_zipObject(); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/dagre-d3-es/src/graphlib/graph.js function incrementOrInitEntry(map5, k2) { if (map5[k2]) { map5[k2]++; } else { map5[k2] = 1; } } function decrementOrRemoveEntry(map5, k2) { if (!--map5[k2]) { delete map5[k2]; } } function edgeArgsToId(isDirected, v_, w_, name) { var v3 = "" + v_; var w3 = "" + w_; if (!isDirected && v3 > w3) { var tmp = v3; v3 = w3; w3 = tmp; } return v3 + EDGE_KEY_DELIM + w3 + EDGE_KEY_DELIM + (isUndefined_default(name) ? DEFAULT_EDGE_NAME : name); } function edgeArgsToObj(isDirected, v_, w_, name) { var v3 = "" + v_; var w3 = "" + w_; if (!isDirected && v3 > w3) { var tmp = v3; v3 = w3; w3 = tmp; } var edgeObj = { v: v3, w: w3 }; 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/[email protected]/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"); } 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_default6(void 0); this._defaultEdgeLabelFn = constant_default6(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 ========= */ isDirected() { return this._isDirected; } isMultigraph() { return this._isMultigraph; } isCompound() { return this._isCompound; } setGraph(label) { this._label = label; return this; } graph() { return this._label; } /* === Node functions ========== */ setDefaultNodeLabel(newDefault) { if (!isFunction_default(newDefault)) { newDefault = constant_default6(newDefault); } this._defaultNodeLabelFn = newDefault; return this; } nodeCount() { return this._nodeCount; } nodes() { return keys_default(this._nodes); } sources() { var self2 = this; return filter_default3(this.nodes(), function(v3) { return isEmpty_default(self2._in[v3]); }); } sinks() { var self2 = this; return filter_default3(this.nodes(), function(v3) { return isEmpty_default(self2._out[v3]); }); } 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; } 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; } node(v3) { return this._nodes[v3]; } hasNode(v3) { return Object.prototype.hasOwnProperty.call(this._nodes, v3); } 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; } 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; } _removeFromParentsChildList(v3) { delete this._children[this._parent[v3]][v3]; } parent(v3) { if (this._isCompound) { var parent4 = this._parent[v3]; if (parent4 !== GRAPH_NODE) { return parent4; } } } 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 []; } } predecessors(v3) { var predsV = this._preds[v3]; if (predsV) { return keys_default(predsV); } } successors(v3) { var sucsV = this._sucs[v3]; if (sucsV) { return keys_default(sucsV); } } neighbors(v3) { var preds = this.predecessors(v3); if (preds) { return union_default(preds, this.successors(v3)); } } isLeaf(v3) { var neighbors; if (this.isDirected()) { neighbors = this.successors(v3); } else { neighbors = this.neighbors(v3); } return neighbors.length === 0; } filterNodes(filter6) { 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 (filter6(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 ========== */ setDefaultEdgeLabel(newDefault) { if (!isFunction_default(newDefault)) { newDefault = constant_default6(newDefault); } this._defaultEdgeLabelFn = newDefault; return this; } edgeCount() { return this._edgeCount; } edges() { return values_default(this._edgeObjs); } setPath(vs, value2) { var self2 = this; var args = arguments; reduce_default(vs, function(v3, w3) { if (args.length > 1) { self2.setEdge(v3, w3, value2); } else { self2.setEdge(v3, w3); } return w3; }); return this; } /* * setEdge(v, w, [value, [name]]) * setEdge({ v, w, [name] }, [value]) */ setEdge() { var v3, w3, name, value2; var valueSpecified = false; var arg0 = arguments[0]; if (typeof arg0 === "object" && arg0 !== null && "v" in arg0) { v3 = arg0.v; w3 = arg0.w; name = arg0.name; if (arguments.length === 2) { value2 = arguments[1]; valueSpecified = true; } } else { v3 = arg0; w3 = arguments[1]; name = arguments[3]; if (arguments.length > 2) { value2 = arguments[2]; valueSpecified = true; } } v3 = "" + v3; w3 = "" + w3; if (!isUndefined_default(name)) { name = "" + name; } var e3 = edgeArgsToId(this._isDirected, v3, w3, 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(w3); this._edgeLabels[e3] = valueSpecified ? value2 : this._defaultEdgeLabelFn(v3, w3, name); var edgeObj = edgeArgsToObj(this._isDirected, v3, w3, name); v3 = edgeObj.v; w3 = edgeObj.w; Object.freeze(edgeObj); this._edgeObjs[e3] = edgeObj; incrementOrInitEntry(this._preds[w3], v3); incrementOrInitEntry(this._sucs[v3], w3); this._in[w3][e3] = edgeObj; this._out[v3][e3] = edgeObj; this._edgeCount++; return this; } edge(v3, w3, name) { var e3 = arguments.length === 1 ? edgeObjToId(this._isDirected, arguments[0]) : edgeArgsToId(this._isDirected, v3, w3, name); return this._edgeLabels[e3]; } hasEdge(v3, w3, name) { var e3 = arguments.length === 1 ? edgeObjToId(this._isDirected, arguments[0]) : edgeArgsToId(this._isDirected, v3, w3, name); return Object.prototype.hasOwnProperty.call(this._edgeLabels, e3); } removeEdge(v3, w3, name) { var e3 = arguments.length === 1 ? edgeObjToId(this._isDirected, arguments[0]) : edgeArgsToId(this._isDirected, v3, w3, name); var edge = this._edgeObjs[e3]; if (edge) { v3 = edge.v; w3 = edge.w; delete this._edgeLabels[e3]; delete this._edgeObjs[e3]; decrementOrRemoveEntry(this._preds[w3], v3); decrementOrRemoveEntry(this._sucs[v3], w3); delete this._in[w3][e3]; delete this._out[v3][e3]; this._edgeCount--; } return this; } inEdges(v3, u2) { var inV = this._in[v3]; if (inV) { var edges5 = values_default(inV); if (!u2) { return edges5; } return filter_default3(edges5, function(edge) { return edge.v === u2; }); } } outEdges(v3, w3) { var outV = this._out[v3]; if (outV) { var edges5 = values_default(outV); if (!w3) { return edges5; } return filter_default3(edges5, function(edge) { return edge.w === w3; }); } } nodeEdges(v3, w3) { var inEdges = this.inEdges(v3, w3); if (inEdges) { return inEdges.concat(this.outEdges(v3, w3)); } } }; 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/[email protected]/node_modules/dagre-d3-es/src/graphlib/index.js var init_graphlib = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/dagre-d3-es/src/graphlib/index.js"() { "use strict"; init_graph(); } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/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/[email protected]/node_modules/dagre-d3-es/src/dagre/greedy-fas.js function greedyFAS(g2, weightFn) { if (g2.nodeCount() <= 1) { return []; } var state5 = buildState(g2, weightFn || DEFAULT_WEIGHT_FN); var results = doGreedyFAS(state5.graph, state5.buckets, state5.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 w3 = edge.w; var wEntry = g2.node(w3); 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/[email protected]/node_modules/dagre-d3-es/src/dagre/greedy-fas.js"() { "use strict"; init_lodash(); init_graphlib(); init_list(); DEFAULT_WEIGHT_FN = constant_default6(1); __name(greedyFAS, "greedyFAS"); __name(doGreedyFAS, "doGreedyFAS"); __name(removeNode, "removeNode"); __name(buildState, "buildState"); __name(assignBucket, "assignBucket"); } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/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/[email protected]/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 y5 = rect3.y; var dx = point8.x - x5; var dy = point8.y - y5; var w3 = rect3.width / 2; var h2 = 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) * w3 > Math.abs(dx) * h2) { if (dy < 0) { h2 = -h2; } sx = h2 * dx / dy; sy = h2; } else { if (dx < 0) { w3 = -w3; } sx = w3; sy = w3 * dy / dx; } return { x: x5 + sx, y: y5 + 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 min9 = 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 -= min9; } }); } 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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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 w3 = attrs.width; attrs.width = attrs.height; attrs.height = w3; } 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/[email protected]/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/[email protected]/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 w3 = e3.w; var wRank = g2.node(w3).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, w3, { weight: edgeLabel.weight }, name); } function undo3(g2) { forEach_default(g2.graph().dummyChains, function(v3) { var node2 = g2.node(v3); var origLabel = node2.edgeLabel; var w3; g2.setEdge(node2.edgeObj, origLabel); while (node2.dummy) { w3 = 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 = w3; node2 = g2.node(v3); } }); } var init_normalize = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/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/[email protected]/node_modules/dagre-d3-es/src/dagre/rank/util.js"() { "use strict"; init_lodash(); __name(longestPath, "longestPath"); __name(slack, "slack"); } }); // ../../node_modules/.pnpm/[email protected]/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 size5 = g2.nodeCount(); t4.setNode(start3, {}); var edge, delta; while (tightTree(t4, g2) < size5) { 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, w3 = v3 === edgeV ? e3.w : edgeV; if (!t4.hasNode(w3) && !slack(g2, e3)) { t4.setNode(w3, {}); t4.setEdge(v3, w3, {}); dfs3(w3); } }); } __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/[email protected]/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/[email protected]/node_modules/dagre-d3-es/src/graphlib/alg/components.js var init_components = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/dagre-d3-es/src/graphlib/alg/components.js"() { "use strict"; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/dagre-d3-es/src/graphlib/data/priority-queue.js var init_priority_queue = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/dagre-d3-es/src/graphlib/data/priority-queue.js"() { "use strict"; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js var DEFAULT_WEIGHT_FUNC; var init_dijkstra = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js"() { "use strict"; init_lodash(); init_priority_queue(); DEFAULT_WEIGHT_FUNC = constant_default6(1); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js var init_dijkstra_all = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js"() { "use strict"; init_dijkstra(); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/dagre-d3-es/src/graphlib/alg/tarjan.js var init_tarjan = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/dagre-d3-es/src/graphlib/alg/tarjan.js"() { "use strict"; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/dagre-d3-es/src/graphlib/alg/find-cycles.js var init_find_cycles = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/dagre-d3-es/src/graphlib/alg/find-cycles.js"() { "use strict"; init_tarjan(); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js var DEFAULT_WEIGHT_FUNC2; var init_floyd_warshall = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js"() { "use strict"; init_lodash(); DEFAULT_WEIGHT_FUNC2 = constant_default6(1); } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/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/[email protected]/node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js var init_is_acyclic = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js"() { "use strict"; init_topsort(); } }); // ../../node_modules/.pnpm/[email protected]/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(w3) { doDfs(g2, w3, postorder3, visited, navigation, acc); }); if (postorder3) { acc.push(v3); } } } var init_dfs = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/dagre-d3-es/src/graphlib/alg/dfs.js"() { "use strict"; init_lodash(); __name(dfs, "dfs"); __name(doDfs, "doDfs"); } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/dagre-d3-es/src/graphlib/alg/postorder.js"() { "use strict"; init_dfs(); __name(postorder, "postorder"); } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/dagre-d3-es/src/graphlib/alg/preorder.js"() { "use strict"; init_dfs(); __name(preorder, "preorder"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/dagre-d3-es/src/graphlib/alg/prim.js var init_prim = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/dagre-d3-es/src/graphlib/alg/prim.js"() { "use strict"; init_priority_queue(); init_graph(); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/dagre-d3-es/src/graphlib/alg/index.js var init_alg = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/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, f3; while (e3 = leaveEdge(t4)) { f3 = enterEdge(t4, g2, e3); exchangeEdges(t4, g2, e3, f3); } } 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(w3) { if (!Object.prototype.hasOwnProperty.call(visited, w3)) { nextLim = dfsAssignLowLim(tree, visited, nextLim, w3, v3); } }); label.low = low; label.lim = nextLim++; if (parent4) { label.parent = parent4; } else { delete label.parent; } return nextLim; } function leaveEdge(tree) { return find_default(tree.edges(), function(e3) { return tree.edge(e3).cutvalue < 0; }); } function enterEdge(t4, g2, edge) { var v3 = edge.v; var w3 = edge.w; if (!g2.hasEdge(v3, w3)) { v3 = edge.w; w3 = edge.v; } var vLabel = t4.node(v3); var wLabel = t4.node(w3); 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, f3) { var v3 = e3.v; var w3 = e3.w; t4.removeEdge(v3, w3); t4.setEdge(f3.v, f3.w, {}); initLowLimValues(t4); initCutValues(t4, g2); updateRanks(t4, g2); } function updateRanks(t4, g2) { var root4 = find_default(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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js"() { "use strict"; init_lodash(); __name(addSubgraphConstraints, "addSubgraphConstraints"); } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/node_modules/dagre-d3-es/src/dagre/order/cross-count.js"() { "use strict"; init_lodash(); __name(crossCount, "crossCount"); __name(twoLayerCrossCount, "twoLayerCrossCount"); } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/dagre-d3-es/src/dagre/order/init-order.js"() { "use strict"; init_lodash(); __name(initOrder, "initOrder"); } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/dagre-d3-es/src/dagre/order/barycenter.js"() { "use strict"; init_lodash(); __name(barycenter, "barycenter"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js function resolveConflicts(entries, cg) { var mappedEntries = {}; forEach_default(entries, 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 entries = []; 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(); entries.push(entry); forEach_default(entry["in"].reverse(), handleIn(entry)); forEach_default(entry.out, handleOut(entry)); } return map_default( filter_default3(entries, 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/[email protected]/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/[email protected]/node_modules/dagre-d3-es/src/dagre/order/sort.js function sort(entries, biasRight) { var parts = partition(entries, 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 last3; while (unsortable.length && (last3 = last_default(unsortable)).i <= index) { unsortable.pop(); vs.push(last3.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_sort2 = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/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 br2 = node2 ? node2.borderRight : void 0; var subgraphs = {}; if (bl) { movable = filter_default3(movable, function(w3) { return w3 !== bl && w3 !== br2; }); } 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 entries = resolveConflicts(barycenters, cg); expandSubgraphs(entries, subgraphs); var result = sort(entries, biasRight); if (bl) { result.vs = flatten_default([bl, result.vs, br2]); if (g2.predecessors(bl).length) { var blPred = g2.node(g2.predecessors(bl)[0]), brPred = g2.node(g2.predecessors(br2)[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(entries, subgraphs) { forEach_default(entries, 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/[email protected]/node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js"() { "use strict"; init_lodash(); init_barycenter(); init_resolve_conflicts(); init_sort2(); __name(sortSubgraph, "sortSubgraph"); __name(expandSubgraphs, "expandSubgraphs"); __name(mergeBarycenters, "mergeBarycenters"); } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/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/[email protected]/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, w3) { var vPath = []; var wPath = []; var low = Math.min(postorderNums[v3].low, postorderNums[w3].low); var lim = Math.max(postorderNums[v3].lim, postorderNums[w3].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 = w3; 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/[email protected]/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/[email protected]/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 w3 = findOtherInnerSegmentNode(g2, v3), k1 = w3 ? g2.node(w3).order : prevLayerLength; if (w3 || 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_default(g2.predecessors(v3), function(u2) { return g2.node(u2).dummy; }); } } function addConflict(conflicts, v3, w3) { if (v3 > w3) { var tmp = v3; v3 = w3; w3 = tmp; } var conflictsV = conflicts[v3]; if (!conflictsV) { conflicts[v3] = conflictsV = {}; } conflictsV[w3] = true; } function hasConflict(conflicts, v3, w3) { if (v3 > w3) { var tmp = v3; v3 = w3; w3 = tmp; } return !!conflicts[v3] && Object.prototype.hasOwnProperty.call(conflicts[v3], w3); } 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(w4) { return pos[w4]; }); var mp = (ws.length - 1) / 2; for (var i2 = Math.floor(mp), il = Math.ceil(mp); i2 <= il; ++i2) { var w3 = ws[i2]; if (align[v3] === v3 && prevIdx < pos[w3] && !hasConflict(conflicts, v3, w3)) { align[w3] = v3; align[v3] = root4[v3] = root4[w3]; prevIdx = pos[w3]; } } } }); }); 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 min9 = 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 (min9 !== Number.POSITIVE_INFINITY && node2.borderType !== borderType) { xs[elem] = Math.max(xs[elem], min9); } } __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 min9 = Number.POSITIVE_INFINITY; forIn_default(xs, function(x5, v3) { var halfWidth = width(g2, v3) / 2; max10 = Math.max(x5 + halfWidth, max10); min9 = Math.min(x5 - halfWidth, min9); }); return max10 - min9; }); } 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, w3) { var vLabel = g2.node(v3); var wLabel = g2.node(w3); 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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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 w3 = g2.node(e3.w); var label = { rank: (w3.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 y5 = attrs.y; var w3 = attrs.width; var h2 = attrs.height; minX = Math.min(minX, x5 - w3 / 2); maxX = Math.max(maxX, x5 + w3 / 2); minY = Math.min(minY, y5 - h2 / 2); maxY = Math.max(maxY, y5 + h2 / 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 b2 = g2.node(node2.borderBottom); var l2 = g2.node(last_default(node2.borderLeft)); var r2 = g2.node(last_default(node2.borderRight)); node2.width = Math.abs(r2.x - l2.x); node2.height = Math.abs(b2.y - t4.y); node2.x = l2.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 y5 = 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: y5 - dy }, { x: x5 + 5 * dx / 6, y: y5 - dy }, { x: x5 + dx, y: y5 }, { x: x5 + 5 * dx / 6, y: y5 + dy }, { x: x5 + 2 * dx / 3, y: y5 + 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/[email protected]/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/[email protected]/node_modules/dagre-d3-es/src/dagre/index.js var init_dagre = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/dagre-d3-es/src/dagre/index.js"() { "use strict"; init_acyclic(); init_layout(); init_normalize(); init_rank(); } }); // ../../node_modules/.pnpm/[email protected]/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/[email protected]/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, clear7, isDescendant2, edgeInCluster, copy2, extractDescendants, findCommonEdges, findNonClusterChild, getAnchorId, adjustClustersAndEdges, extractor, sorter, sortNodesByHierarchy; 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(); clear7 = /* @__PURE__ */ __name(() => { descendants.clear(); parents.clear(); clusterDb.clear(); }, "clear"); isDescendant2 = /* @__PURE__ */ __name((id28, ancestorId) => { const ancestorDescendants = descendants.get(ancestorId) || []; log.trace("In isDescendant", ancestorId, " ", id28, " = ", ancestorDescendants.includes(id28)); return ancestorDescendants.includes(id28); }, "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 nodes7 = graph.children(clusterId) || []; if (clusterId !== rootId) { nodes7.push(clusterId); } log.warn("Copying (nodes) clusterId", clusterId, "nodes", nodes7); nodes7.forEach((node2) => { if (graph.children(node2).length > 0) { copy2(node2, graph, newGraph, rootId); } else { const data5 = graph.node(node2); log.info("cp ", node2, " to ", rootId, " with parent ", clusterId); newGraph.setNode(node2, data5); 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 edges5 = graph.edges(node2); log.debug("Copying Edges", edges5); edges5.forEach((edge) => { log.info("Edge", edge); const data6 = graph.edge(edge.v, edge.w, edge.name); log.info("Edge data", data6, rootId); try { if (edgeInCluster(edge, rootId)) { log.info("Copying as ", edge.v, edge.w, data6, edge.name); newGraph.setEdge(edge.v, edge.w, data6, edge.name); log.info("newGraph edges ", newGraph.edges(), newGraph.edge(newGraph.edges()[0])); } 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((id28, graph) => { const children2 = graph.children(id28); let res = [...children2]; for (const child of children2) { parents.set(child, id28); res = [...res, ...extractDescendants(child, graph)]; } return res; }, "extractDescendants"); findCommonEdges = /* @__PURE__ */ __name((graph, id1, id28) => { const edges1 = graph.edges().filter((edge) => edge.v === id1 || edge.w === id1); const edges22 = graph.edges().filter((edge) => edge.v === id28 || edge.w === id28); const edges1Prim = edges1.map((edge) => { return { v: edge.v === id1 ? id28 : 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((id28, graph, clusterId) => { const children2 = graph.children(id28); log.trace("Searching children of id ", id28, children2); if (children2.length < 1) { return id28; } 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((id28) => { if (!clusterDb.has(id28)) { return id28; } if (!clusterDb.get(id28).externalConnections) { return id28; } if (clusterDb.has(id28)) { return clusterDb.get(id28).id; } return id28; }, "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(id28) { const children2 = graph.children(id28); if (children2.length > 0) { log.warn( "Cluster identified", id28, " Replacement id in edges: ", findNonClusterChild(id28, graph, id28) ); descendants.set(id28, extractDescendants(id28, graph)); clusterDb.set(id28, { id: findNonClusterChild(id28, graph, id28), clusterData: graph.node(id28) }); } }); graph.nodes().forEach(function(id28) { const children2 = graph.children(id28); const edges5 = graph.edges(); if (children2.length > 0) { log.debug("Cluster identified", id28, descendants); edges5.forEach((edge) => { const d1 = isDescendant2(edge.v, id28); const d2 = isDescendant2(edge.w, id28); if (d1 ^ d2) { log.warn("Edge: ", edge, " leaves cluster ", id28); log.warn("Descendants of XXX ", id28, ": ", descendants.get(id28)); clusterDb.get(id28).externalConnections = true; } }); } else { log.debug("Not a cluster ", id28, descendants); } }); for (let id28 of clusterDb.keys()) { const nonClusterChild = clusterDb.get(id28).id; const parent4 = graph.parent(nonClusterChild); if (parent4 !== id28 && clusterDb.has(parent4) && !clusterDb.get(parent4).externalConnections) { clusterDb.get(id28).id = parent4; } } 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 w3 = 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); w3 = 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 (w3 !== e3.w) { const parent4 = graph.parent(w3); clusterDb.get(parent4).externalConnections = true; edge.toCluster = e3.w; } log.warn("Fix Replacing with XXX", v3, w3, e3.name); graph.setEdge(v3, w3, 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 nodes7 = graph.nodes(); let hasChildren = false; for (const node2 of nodes7) { 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 = ", nodes7, depth); for (const node2 of nodes7) { 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).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 {}; }); log.warn("Old graph before copy", write(graph)); copy2(node2, graph, clusterGraph, node2); graph.setNode(node2, { clusterNode: true, id: node2, clusterData: clusterDb.get(node2).clusterData, label: clusterDb.get(node2).label, graph: clusterGraph }); log.warn("New graph after copy node: (", node2, ")", write(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); } } nodes7 = graph.nodes(); log.warn("New list of nodes", nodes7); for (const node2 of nodes7) { const data5 = graph.node(node2); log.warn(" Now next level", node2, data5); if (data5?.clusterNode) { extractor(data5.graph, depth + 1); } } }, "extractor"); sorter = /* @__PURE__ */ __name((graph, nodes7) => { if (nodes7.length === 0) { return []; } let result = Object.assign([], nodes7); nodes7.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"); } }); // src/rendering-util/layout-algorithms/dagre/index.js var dagre_exports = {}; __export(dagre_exports, { render: () => render3 }); var 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(); recursiveRender = /* @__PURE__ */ __name(async (_elem, graph, diagramType, id28, 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 nodes7 = elem.insert("g").attr("class", "nodes"); await Promise.all( graph.nodes().map(async function(v3) { const node2 = graph.node(v3); if (parentCluster !== void 0) { const data5 = JSON.parse(JSON.stringify(parentCluster.clusterData)); log.trace( "Setting data for parent cluster XXX\n Node.id = ", v3, "\n data=", data5.height, "\nParent cluster", parentCluster.height ); graph.setNode(parentCluster.id, data5); if (!graph.parent(v3)) { log.trace("Setting parent", v3, parentCluster.id); graph.setParent(v3, parentCluster.id, data5); } } 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( nodes7, node2.graph, diagramType, id28, 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, nodes7, graph.node(v3), dir2); await insertNode(nodes7, 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) ); 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); } } }) ); graph.edges().forEach(function(e3) { const edge = graph.edge(e3); log.info("Edge " + e3.v + " -> " + e3.w + ": " + JSON.stringify(edge), edge); edge.points.forEach((point8) => point8.y += subGraphTitleTotalMargin / 2); const startNode = graph.node(e3.v); var endNode = graph.node(e3.w); const paths = insertEdge(edgePaths, edge, clusterDb, diagramType, startNode, endNode, id28); 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, svg) => { 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 = svg.select("g"); markers_default(element3, data4Layout.markers, data4Layout.type, data4Layout.diagramId); clear6(); clear5(); clear4(); clear7(); 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 edge1 = structuredClone(edge); const edgeMid = structuredClone(edge); const edge2 = structuredClone(edge); edge1.label = ""; edge1.arrowTypeEnd = "none"; edge1.id = nodeId + "-cyclic-special-1"; edgeMid.arrowTypeEnd = "none"; edgeMid.id = nodeId + "-cyclic-special-mid"; edge2.label = ""; if (node2.isGroup) { edge1.fromCluster = nodeId; edge2.toCluster = nodeId; } edge2.id = nodeId + "-cyclic-special-2"; graph.setEdge(nodeId, specialId1, edge1, nodeId + "-cyclic-special-0"); graph.setEdge(specialId1, specialId2, edgeMid, nodeId + "-cyclic-special-1"); graph.setEdge(specialId2, nodeId, edge2, nodeId + "-cyc { for (const loader27 of loaders) { layoutAlgorithms[loader27.name] = loader27; } }, "registerLayoutLoaders"); registerDefaultLayoutLoaders = /* @__PURE__ */ __name(() => { registerLayoutLoaders([ { name: "dagre", loader: /* @__PURE__ */ __name(async () => await Promise.resolve().then(() => (init_dagre2(), dagre_exports)), "loader") } ]); }, "registerDefaultLayoutLoaders"); registerDefaultLayoutLoaders(); render4 = /* @__PURE__ */ __name(async (data4Layout, svg) => { if (!(data4Layout.layoutAlgorithm in layoutAlgorithms)) { throw new Error(`Unknown layout algorithm: ${data4Layout.layoutAlgorithm}`); } const layoutDefinition = layoutAlgorithms[data4Layout.layoutAlgorithm]; const layoutRenderer = await layoutDefinition.loader(); return layoutRenderer.render(data4Layout, svg, internalHelpers, { algorithm: layoutDefinition.algorithm }); }, "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((svg, padding2, cssDiagram, useMaxWidth) => { svg.attr("class", cssDiagram); const { width: width3, height: height2, x: x5, y: y5 } = calculateDimensionsWithPadding(svg, padding2); configureSvgSize(svg, height2, width3, useMaxWidth); const viewBox = createViewBox(x5, y5, width3, height2, padding2); svg.attr("viewBox", viewBox); log.debug(`viewBox configured: ${viewBox} with padding: ${padding2}`); }, "setupViewPortForSVG"); calculateDimensionsWithPadding = /* @__PURE__ */ __name((svg, padding2) => { const bounds4 = svg.node()?.getBBox() || { width: 0, height: 0, x: 0, y: 0 }; return { width: bounds4.width + padding2 * 2, height: bounds4.height + padding2 * 2, x: bounds4.x, y: bounds4.y }; }, "calculateDimensionsWithPadding"); createViewBox = /* @__PURE__ */ __name((x5, y5, width3, height2, padding2) => { return `${x5 - padding2} ${y5 - padding2} ${width3} ${height2}`; }, "createViewBox"); } }); // src/diagrams/flowchart/flowRenderer-v3-unified.ts var getClasses2, draw2, flowRenderer_v3_unified_default; var init_flowRenderer_v3_unified = __esm({ "src/diagrams/flowchart/flowRenderer-v3-unified.ts"() { "use strict"; init_src32(); init_diagramAPI(); init_logger(); init_insertElementsForSize(); init_render(); init_setupViewPortForSVG(); init_utils2(); init_flowDb(); getClasses2 = /* @__PURE__ */ __name(function(text3, diagramObj) { return diagramObj.db.getClasses(); }, "getClasses"); draw2 = /* @__PURE__ */ __name(async function(text3, id28, _version, diag) { log.info("REF0:"); log.info("Drawing state diagram (v2)", id28); const { securityLevel, flowchart: conf7, layout: layout6 } = getConfig2(); let sandboxElement; if (securityLevel === "sandbox") { sandboxElement = select_default2("#i" + id28); } const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; log.debug("Before getData: "); const data4Layout = diag.db.getData(); log.debug("Data: ", data4Layout); const svg = getDiagramElement(id28, securityLevel); const direction4 = getDirection(); data4Layout.type = diag.type; data4Layout.layoutAlgorithm = getRegisteredLayoutAlgorithm(layout6); if (data4Layout.layoutAlgorithm === "dagre" && layout6 === "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 = direction4; data4Layout.nodeSpacing = conf7?.nodeSpacing || 50; data4Layout.rankSpacing = conf7?.rankSpacing || 50; data4Layout.markers = ["point", "circle", "cross"]; data4Layout.diagramId = id28; log.debug("REF1:", data4Layout); await render4(data4Layout, svg); const padding2 = data4Layout.config.flowchart?.diagramPadding ?? 8; utils_default2.insertTitle( svg, "flowchartTitleText", conf7?.titleTopMargin || 0, diag.db.getDiagramTitle() ); setupViewPortForSVG(svg, padding2, "flowchart", conf7?.useMaxWidth || false); for (const vertex of data4Layout.nodes) { const node2 = select_default2(`#${id28} [id="${vertex.id}"]`); if (!node2 || !vertex.link) { continue; } const link3 = doc.createElementNS("http://www.w3.org/2000/svg", "a"); link3.setAttributeNS("http://www.w3.org/2000/svg", "class", vertex.cssClasses); link3.setAttributeNS("http://www.w3.org/2000/svg", "rel", "noopener"); if (securityLevel === "sandbox") { link3.setAttributeNS("http://www.w3.org/2000/svg", "target", "_top"); } else if (vertex.linkTarget) { link3.setAttributeNS("http://www.w3.org/2000/svg", "target", vertex.linkTarget); } const linkNode = node2.insert(function() { return link3; }, ":first-child"); const shape = node2.select(".label-container"); if (shape) { linkNode.append(function() { return shape.node(); }); } const label = node2.select(".label"); if (label) { linkNode.append(function() { return label.node(); }); } } }, "draw"); flowRenderer_v3_unified_default = { getClasses: getClasses2, draw: draw2 }; } }); // src/diagrams/flowchart/parser/flow.jison var parser3, flow_default; var init_flow = __esm({ "src/diagrams/flowchart/parser/flow.jison"() { "use strict"; parser3 = function() { var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l2) { for (o3 = o3 || {}, l2 = k2.length; l2--; o3[k2[l2]] = 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, 83, 84, 85, 86, 87, 88, 101, 104, 105, 108, 110, 113, 114, 115, 120, 121, 122, 123], $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, 49], $Ve = [1, 48], $Vf = [1, 29], $Vg = [1, 30], $Vh = [1, 31], $Vi = [1, 32], $Vj = [1, 33], $Vk = [1, 44], $Vl = [1, 46], $Vm = [1, 42], $Vn = [1, 47], $Vo = [1, 43], $Vp = [1, 50], $Vq = [1, 45], $Vr = [1, 51], $Vs = [1, 52], $Vt = [1, 34], $Vu = [1, 35], $Vv = [1, 36], $Vw = [1, 37], $Vx = [1, 57], $Vy = [1, 8, 9, 10, 11, 27, 32, 34, 36, 38, 44, 60, 83, 84, 85, 86, 87, 88, 101, 104, 105, 108, 110, 113, 114, 115, 120, 121, 122, 123], $Vz = [1, 61], $VA = [1, 60], $VB = [1, 62], $VC = [8, 9, 11, 75, 77], $VD = [1, 77], $VE = [1, 90], $VF = [1, 95], $VG = [1, 94], $VH = [1, 91], $VI = [1, 87], $VJ = [1, 93], $VK = [1, 89], $VL = [1, 96], $VM = [1, 92], $VN = [1, 97], $VO = [1, 88], $VP = [8, 9, 10, 11, 40, 75, 77], $VQ = [8, 9, 10, 11, 40, 46, 75, 77], $VR = [8, 9, 10, 11, 29, 40, 44, 46, 48, 50, 52, 54, 56, 58, 60, 63, 65, 67, 68, 70, 75, 77, 88, 101, 104, 105, 108, 110, 113, 114, 115], $VS = [8, 9, 11, 44, 60, 75, 77, 88, 101, 104, 105, 108, 110, 113, 114, 115], $VT = [44, 60, 88, 101, 104, 105, 108, 110, 113, 114, 115], $VU = [1, 123], $VV = [1, 122], $VW = [1, 130], $VX = [1, 144], $VY = [1, 145], $VZ = [1, 146], $V_ = [1, 147], $V$ = [1, 132], $V01 = [1, 134], $V11 = [1, 138], $V21 = [1, 139], $V31 = [1, 140], $V41 = [1, 141], $V51 = [1, 142], $V61 = [1, 143], $V71 = [1, 148], $V81 = [1, 149], $V91 = [1, 128], $Va1 = [1, 129], $Vb1 = [1, 136], $Vc1 = [1, 131], $Vd1 = [1, 135], $Ve1 = [1, 133], $Vf1 = [8, 9, 10, 11, 27, 32, 34, 36, 38, 44, 60, 83, 84, 85, 86, 87, 88, 101, 104, 105, 108, 110, 113, 114, 115, 120, 121, 122, 123], $Vg1 = [1, 151], $Vh1 = [1, 153], $Vi1 = [8, 9, 11], $Vj1 = [8, 9, 10, 11, 14, 44, 60, 88, 104, 105, 108, 110, 113, 114, 115], $Vk1 = [1, 173], $Vl1 = [1, 169], $Vm1 = [1, 170], $Vn1 = [1, 174], $Vo1 = [1, 171], $Vp1 = [1, 172], $Vq1 = [77, 115, 118], $Vr1 = [8, 9, 10, 11, 12, 14, 27, 29, 32, 44, 60, 75, 83, 84, 85, 86, 87, 88, 89, 104, 108, 110, 113, 114, 115], $Vs1 = [10, 105], $Vt1 = [31, 49, 51, 53, 55, 57, 62, 64, 66, 67, 69, 71, 115, 116, 117], $Vu1 = [1, 242], $Vv1 = [1, 240], $Vw1 = [1, 244], $Vx1 = [1, 238], $Vy1 = [1, 239], $Vz1 = [1, 241], $VA1 = [1, 243], $VB1 = [1, 245], $VC1 = [1, 263], $VD1 = [8, 9, 11, 105], $VE1 = [8, 9, 10, 11, 60, 83, 104, 105, 108, 109, 110, 111]; var parser23 = { 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, "edgeTextToken": 78, "STR": 79, "MD_STR": 80, "textToken": 81, "keywords": 82, "STYLE": 83, "LINKSTYLE": 84, "CLASSDEF": 85, "CLASS": 86, "CLICK": 87, "DOWN": 88, "UP": 89, "textNoTagsToken": 90, "stylesOpt": 91, "idString[vertex]": 92, "idString[class]": 93, "CALLBACKNAME": 94, "CALLBACKARGS": 95, "HREF": 96, "LINK_TARGET": 97, "STR[link]": 98, "STR[tooltip]": 99, "alphaNum": 100, "DEFAULT": 101, "numList": 102, "INTERPOLATE": 103, "NUM": 104, "COMMA": 105, "style": 106, "styleComponent": 107, "NODE_STRING": 108, "UNIT": 109, "BRKT": 110, "PCT": 111, "idStringToken": 112, "MINUS": 113, "MULT": 114, "UNICODE_TEXT": 115, "TEXT": 116, "TAGSTART": 117, "EDGE_TEXT": 118, "alphaNumToken": 119, "direction_tb": 120, "direction_bt": 121, "direction_rl": 122, "direction_lr": 123, "$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", 79: "STR", 80: "MD_STR", 83: "STYLE", 84: "LINKSTYLE", 85: "CLASSDEF", 86: "CLASS", 87: "CLICK", 88: "DOWN", 89: "UP", 92: "idString[vertex]", 93: "idString[class]", 94: "CALLBACKNAME", 95: "CALLBACKARGS", 96: "HREF", 97: "LINK_TARGET", 98: "STR[link]", 99: "STR[tooltip]", 101: "DEFAULT", 103: "INTERPOLATE", 104: "NUM", 105: "COMMA", 108: "NODE_STRING", 109: "UNIT", 110: "BRKT", 111: "PCT", 113: "MINUS", 114: "MULT", 115: "UNICODE_TEXT", 116: "TEXT", 117: "TAGSTART", 118: "EDGE_TEXT", 120: "direction_tb", 121: "direction_bt", 122: "direction_rl", 123: "direction_lr" }, 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], [76, 1], [76, 2], [76, 1], [76, 1], [72, 1], [73, 3], [30, 1], [30, 2], [30, 1], [30, 1], [82, 1], [82, 1], [82, 1], [82, 1], [82, 1], [82, 1], [82, 1], [82, 1], [82, 1], [82, 1], [82, 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], [102, 1], [102, 3], [91, 1], [91, 3], [106, 1], [106, 2], [107, 1], [107, 1], [107, 1], [107, 1], [107, 1], [107, 1], [107, 1], [107, 1], [112, 1], [112, 1], [112, 1], [112, 1], [112, 1], [112, 1], [112, 1], [112, 1], [112, 1], [112, 1], [112, 1], [81, 1], [81, 1], [81, 1], [81, 1], [90, 1], [90, 1], [90, 1], [90, 1], [90, 1], [90, 1], [90, 1], [90, 1], [90, 1], [90, 1], [90, 1], [78, 1], [78, 1], [119, 1], [119, 1], [119, 1], [119, 1], [119, 1], [119, 1], [119, 1], [119, 1], [119, 1], [119, 1], [119, 1], [47, 1], [47, 2], [100, 1], [100, 2], [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 181: 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], 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], 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], 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: this.$ = { text: $$[$0], type: "text" }; break; case 79: this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type }; break; case 80: this.$ = { text: $$[$0], type: "string" }; break; case 81: this.$ = { text: $$[$0], type: "markdown" }; break; case 82: var inf = yy.destructLink($$[$0]); this.$ = { "type": inf.type, "stroke": inf.stroke, "length": inf.length }; break; case 83: this.$ = $$[$0 - 1]; break; case 84: this.$ = { text: $$[$0], type: "text" }; break; case 85: this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type }; break; case 86: this.$ = { text: $$[$0], type: "string" }; break; case 87: case 102: this.$ = { text: $$[$0], type: "markdown" }; break; case 99: this.$ = { text: $$[$0], type: "text" }; break; case 100: this.$ = { text: $$[$0 - 1].text + "" + $$[$0], type: $$[$0 - 1].type }; break; case 101: this.$ = { text: $$[$0], type: "text" }; break; case 103: this.$ = $$[$0 - 4]; yy.addClass($$[$0 - 2], $$[$0]); break; case 104: this.$ = $$[$0 - 4]; yy.setClass($$[$0 - 2], $$[$0]); break; case 105: case 113: this.$ = $$[$0 - 1]; yy.setClickEvent($$[$0 - 1], $$[$0]); break; case 106: case 114: this.$ = $$[$0 - 3]; yy.setClickEvent($$[$0 - 3], $$[$0 - 2]); yy.setTooltip($$[$0 - 3], $$[$0]); break; case 107: this.$ = $$[$0 - 2]; yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]); break; case 108: this.$ = $$[$0 - 4]; yy.setClickEvent($$[$0 - 4], $$[$0 - 3], $$[$0 - 2]); yy.setTooltip($$[$0 - 4], $$[$0]); break; case 109: this.$ = $$[$0 - 2]; yy.setLink($$[$0 - 2], $$[$0]); break; case 110: this.$ = $$[$0 - 4]; yy.setLink($$[$0 - 4], $$[$0 - 2]); yy.setTooltip($$[$0 - 4], $$[$0]); break; case 111: this.$ = $$[$0 - 4]; yy.setLink($$[$0 - 4], $$[$0 - 2], $$[$0]); break; case 112: this.$ = $$[$0 - 6]; yy.setLink($$[$0 - 6], $$[$0 - 4], $$[$0]); yy.setTooltip($$[$0 - 6], $$[$0 - 2]); break; case 115: this.$ = $$[$0 - 1]; yy.setLink($$[$0 - 1], $$[$0]); break; case 116: this.$ = $$[$0 - 3]; yy.setLink($$[$0 - 3], $$[$0 - 2]); yy.setTooltip($$[$0 - 3], $$[$0]); break; case 117: this.$ = $$[$0 - 3]; yy.setLink($$[$0 - 3], $$[$0 - 2], $$[$0]); break; case 118: this.$ = $$[$0 - 5]; yy.setLink($$[$0 - 5], $$[$0 - 4], $$[$0]); yy.setTooltip($$[$0 - 5], $$[$0 - 2]); break; case 119: this.$ = $$[$0 - 4]; yy.addVertex($$[$0 - 2], void 0, void 0, $$[$0]); break; case 120: this.$ = $$[$0 - 4]; yy.updateLink([$$[$0 - 2]], $$[$0]); break; case 121: this.$ = $$[$0 - 4]; yy.updateLink($$[$0 - 2], $$[$0]); break; case 122: this.$ = $$[$0 - 8]; yy.updateLinkInterpolate([$$[$0 - 6]], $$[$0 - 2]); yy.updateLink([$$[$0 - 6]], $$[$0]); break; case 123: this.$ = $$[$0 - 8]; yy.updateLinkInterpolate($$[$0 - 6], $$[$0 - 2]); yy.updateLink($$[$0 - 6], $$[$0]); break; case 124: this.$ = $$[$0 - 6]; yy.updateLinkInterpolate([$$[$0 - 4]], $$[$0]); break; case 125: this.$ = $$[$0 - 6]; yy.updateLinkInterpolate($$[$0 - 4], $$[$0]); break; case 126: case 128: this.$ = [$$[$0]]; break; case 127: case 129: $$[$0 - 2].push($$[$0]); this.$ = $$[$0 - 2]; break; case 131: this.$ = $$[$0 - 1] + $$[$0]; break; case 179: this.$ = $$[$0]; break; case 180: this.$ = $$[$0 - 1] + "" + $$[$0]; break; case 182: this.$ = $$[$0 - 1] + "" + $$[$0]; break; case 183: this.$ = { stmt: "dir", value: "TB" }; break; case 184: this.$ = { stmt: "dir", value: "BT" }; break; case 185: this.$ = { stmt: "dir", value: "RL" }; break; case 186: this.$ = { stmt: "dir", value: "LR" }; 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: 38, 44: $Vd, 45: 39, 47: 40, 60: $Ve, 83: $Vf, 84: $Vg, 85: $Vh, 86: $Vi, 87: $Vj, 88: $Vk, 101: $Vl, 104: $Vm, 105: $Vn, 108: $Vo, 110: $Vp, 112: 41, 113: $Vq, 114: $Vr, 115: $Vs, 120: $Vt, 121: $Vu, 122: $Vv, 123: $Vw }, o2($V3, [2, 9]), o2($V3, [2, 10]), o2($V3, [2, 11]), { 8: [1, 54], 9: [1, 55], 10: $Vx, 15: 53, 18: 56 }, o2($Vy, [2, 3]), o2($Vy, [2, 4]), o2($Vy, [2, 5]), o2($Vy, [2, 6]), o2($Vy, [2, 7]), o2($Vy, [2, 8]), { 8: $Vz, 9: $VA, 11: $VB, 21: 58, 41: 59, 72: 63, 75: [1, 64], 77: [1, 65] }, { 8: $Vz, 9: $VA, 11: $VB, 21: 66 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 67 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 68 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 69 }, { 8: $Vz, 9: $VA, 11: $VB, 21: 70 }, { 8: $Vz, 9: $VA, 10: [1, 71], 11: $VB, 21: 72 }, o2($Vy, [2, 36]), { 35: [1, 73] }, { 37: [1, 74] }, o2($Vy, [2, 39]), o2($VC, [2, 50], { 18: 75, 39: 76, 10: $Vx, 40: $VD }), { 10: [1, 78] }, { 10: [1, 79] }, { 10: [1, 80] }, { 10: [1, 81] }, { 14: $VE, 44: $VF, 60: $VG, 79: [1, 85], 88: $VH, 94: [1, 82], 96: [1, 83], 100: 84, 104: $VI, 105: $VJ, 108: $VK, 110: $VL, 113: $VM, 114: $VN, 115: $VO, 119: 86 }, o2($Vy, [2, 183]), o2($Vy, [2, 184]), o2($Vy, [2, 185]), o2($Vy, [2, 186]), o2($VP, [2, 51]), o2($VP, [2, 54], { 46: [1, 98] }), o2($VQ, [2, 72], { 112: 111, 29: [1, 99], 44: $Vd, 48: [1, 100], 50: [1, 101], 52: [1, 102], 54: [1, 103], 56: [1, 104], 58: [1, 105], 60: $Ve, 63: [1, 106], 65: [1, 107], 67: [1, 108], 68: [1, 109], 70: [1, 110], 88: $Vk, 101: $Vl, 104: $Vm, 105: $Vn, 108: $Vo, 110: $Vp, 113: $Vq, 114: $Vr, 115: $Vs }), o2($VR, [2, 179]), o2($VR, [2, 140]), o2($VR, [2, 141]), o2($VR, [2, 142]), o2($VR, [2, 143]), o2($VR, [2, 144]), o2($VR, [2, 145]), o2($VR, [2, 146]), o2($VR, [2, 147]), o2($VR, [2, 148]), o2($VR, [2, 149]), o2($VR, [2, 150]), o2($V3, [2, 12]), o2($V3, [2, 18]), o2($V3, [2, 19]), { 9: [1, 112] }, o2($VS, [2, 26], { 18: 113, 10: $Vx }), o2($Vy, [2, 27]), { 42: 114, 43: 38, 44: $Vd, 45: 39, 47: 40, 60: $Ve, 88: $Vk, 101: $Vl, 104: $Vm, 105: $Vn, 108: $Vo, 110: $Vp, 112: 41, 113: $Vq, 114: $Vr, 115: $Vs }, o2($Vy, [2, 40]), o2($Vy, [2, 41]), o2($Vy, [2, 42]), o2($VT, [2, 76], { 73: 115, 62: [1, 117], 74: [1, 116] }), { 76: 118, 78: 119, 79: [1, 120], 80: [1, 121], 115: $VU, 118: $VV }, o2([44, 60, 62, 74, 88, 101, 104, 105, 108, 110, 113, 114, 115], [2, 82]), o2($Vy, [2, 28]), o2($Vy, [2, 29]), o2($Vy, [2, 30]), o2($Vy, [2, 31]), o2($Vy, [2, 32]), { 10: $VW, 12: $VX, 14: $VY, 27: $VZ, 28: 124, 32: $V_, 44: $V$, 60: $V01, 75: $V11, 79: [1, 126], 80: [1, 127], 82: 137, 83: $V21, 84: $V31, 85: $V41, 86: $V51, 87: $V61, 88: $V71, 89: $V81, 90: 125, 104: $V91, 108: $Va1, 110: $Vb1, 113: $Vc1, 114: $Vd1, 115: $Ve1 }, o2($Vf1, $V4, { 5: 150 }), o2($Vy, [2, 37]), o2($Vy, [2, 38]), o2($VC, [2, 48], { 44: $Vg1 }), o2($VC, [2, 49], { 18: 152, 10: $Vx, 40: $Vh1 }), o2($VP, [2, 44]), { 44: $Vd, 47: 154, 60: $Ve, 88: $Vk, 101: $Vl, 104: $Vm, 105: $Vn, 108: $Vo, 110: $Vp, 112: 41, 113: $Vq, 114: $Vr, 115: $Vs }, { 101: [1, 155], 102: 156, 104: [1, 157] }, { 44: $Vd, 47: 158, 60: $Ve, 88: $Vk, 101: $Vl, 104: $Vm, 105: $Vn, 108: $Vo, 110: $Vp, 112: 41, 113: $Vq, 114: $Vr, 115: $Vs }, { 44: $Vd, 47: 159, 60: $Ve, 88: $Vk, 101: $Vl, 104: $Vm, 105: $Vn, 108: $Vo, 110: $Vp, 112: 41, 113: $Vq, 114: $Vr, 115: $Vs }, o2($Vi1, [2, 105], { 10: [1, 160], 95: [1, 161] }), { 79: [1, 162] }, o2($Vi1, [2, 113], { 119: 164, 10: [1, 163], 14: $VE, 44: $VF, 60: $VG, 88: $VH, 104: $VI, 105: $VJ, 108: $VK, 110: $VL, 113: $VM, 114: $VN, 115: $VO }), o2($Vi1, [2, 115], { 10: [1, 165] }), o2($Vj1, [2, 181]), o2($Vj1, [2, 168]), o2($Vj1, [2, 169]), o2($Vj1, [2, 170]), o2($Vj1, [2, 171]), o2($Vj1, [2, 172]), o2($Vj1, [2, 173]), o2($Vj1, [2, 174]), o2($Vj1, [2, 175]), o2($Vj1, [2, 176]), o2($Vj1, [2, 177]), o2($Vj1, [2, 178]), { 44: $Vd, 47: 166, 60: $Ve, 88: $Vk, 101: $Vl, 104: $Vm, 105: $Vn, 108: $Vo, 110: $Vp, 112: 41, 113: $Vq, 114: $Vr, 115: $Vs }, { 30: 167, 67: $Vk1, 79: $Vl1, 80: $Vm1, 81: 168, 115: $Vn1, 116: $Vo1, 117: $Vp1 }, { 30: 175, 67: $Vk1, 79: $Vl1, 80: $Vm1, 81: 168, 115: $Vn1, 116: $Vo1, 117: $Vp1 }, { 30: 177, 50: [1, 176], 67: $Vk1, 79: $Vl1, 80: $Vm1, 81: 168, 115: $Vn1, 116: $Vo1, 117: $Vp1 }, { 30: 178, 67: $Vk1, 79: $Vl1, 80: $Vm1, 81: 168, 115: $Vn1, 116: $Vo1, 117: $Vp1 }, { 30: 179, 67: $Vk1, 79: $Vl1, 80: $Vm1, 81: 168, 115: $Vn1, 116: $Vo1, 117: $Vp1 }, { 30: 180, 67: $Vk1, 79: $Vl1, 80: $Vm1, 81: 168, 115: $Vn1, 116: $Vo1, 117: $Vp1 }, { 108: [1, 181] }, { 30: 182, 67: $Vk1, 79: $Vl1, 80: $Vm1, 81: 168, 115: $Vn1, 116: $Vo1, 117: $Vp1 }, { 30: 183, 65: [1, 184], 67: $Vk1, 79: $Vl1, 80: $Vm1, 81: 168, 115: $Vn1, 116: $Vo1, 117: $Vp1 }, { 30: 185, 67: $Vk1, 79: $Vl1, 80: $Vm1, 81: 168, 115: $Vn1, 116: $Vo1, 117: $Vp1 }, { 30: 186, 67: $Vk1, 79: $Vl1, 80: $Vm1, 81: 168, 115: $Vn1, 116: $Vo1, 117: $Vp1 }, { 30: 187, 67: $Vk1, 79: $Vl1, 80: $Vm1, 81: 168, 115: $Vn1, 116: $Vo1, 117: $Vp1 }, o2($VR, [2, 180]), o2($V3, [2, 20]), o2($VS, [2, 25]), o2($VC, [2, 46], { 39: 188, 18: 189, 10: $Vx, 40: $VD }), o2($VT, [2, 73], { 10: [1, 190] }), { 10: [1, 191] }, { 30: 192, 67: $Vk1, 79: $Vl1, 80: $Vm1, 81: 168, 115: $Vn1, 116: $Vo1, 117: $Vp1 }, { 77: [1, 193], 78: 194, 115: $VU, 118: $VV }, o2($Vq1, [2, 78]), o2($Vq1, [2, 80]), o2($Vq1, [2, 81]), o2($Vq1, [2, 166]), o2($Vq1, [2, 167]), { 8: $Vz, 9: $VA, 10: $VW, 11: $VB, 12: $VX, 14: $VY, 21: 196, 27: $VZ, 29: [1, 195], 32: $V_, 44: $V$, 60: $V01, 75: $V11, 82: 137, 83: $V21, 84: $V31, 85: $V41, 86: $V51, 87: $V61, 88: $V71, 89: $V81, 90: 197, 104: $V91, 108: $Va1, 110: $Vb1, 113: $Vc1, 114: $Vd1, 115: $Ve1 }, o2($Vr1, [2, 99]), o2($Vr1, [2, 101]), o2($Vr1, [2, 102]), o2($Vr1, [2, 155]), o2($Vr1, [2, 156]), o2($Vr1, [2, 157]), o2($Vr1, [2, 158]), o2($Vr1, [2, 159]), o2($Vr1, [2, 160]), o2($Vr1, [2, 161]), o2($Vr1, [2, 162]), o2($Vr1, [2, 163]), o2($Vr1, [2, 164]), o2($Vr1, [2, 165]), o2($Vr1, [2, 88]), o2($Vr1, [2, 89]), o2($Vr1, [2, 90]), o2($Vr1, [2, 91]), o2($Vr1, [2, 92]), o2($Vr1, [2, 93]), o2($Vr1, [2, 94]), o2($Vr1, [2, 95]), o2($Vr1, [2, 96]), o2($Vr1, [2, 97]), o2($Vr1, [2, 98]), { 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, 198], 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 42: 28, 43: 38, 44: $Vd, 45: 39, 47: 40, 60: $Ve, 83: $Vf, 84: $Vg, 85: $Vh, 86: $Vi, 87: $Vj, 88: $Vk, 101: $Vl, 104: $Vm, 105: $Vn, 108: $Vo, 110: $Vp, 112: 41, 113: $Vq, 114: $Vr, 115: $Vs, 120: $Vt, 121: $Vu, 122: $Vv, 123: $Vw }, { 10: $Vx, 18: 199 }, { 44: [1, 200] }, o2($VP, [2, 43]), { 10: [1, 201], 44: $Vd, 60: $Ve, 88: $Vk, 101: $Vl, 104: $Vm, 105: $Vn, 108: $Vo, 110: $Vp, 112: 111, 113: $Vq, 114: $Vr, 115: $Vs }, { 10: [1, 202] }, { 10: [1, 203], 105: [1, 204] }, o2($Vs1, [2, 126]), { 10: [1, 205], 44: $Vd, 60: $Ve, 88: $Vk, 101: $Vl, 104: $Vm, 105: $Vn, 108: $Vo, 110: $Vp, 112: 111, 113: $Vq, 114: $Vr, 115: $Vs }, { 10: [1, 206], 44: $Vd, 60: $Ve, 88: $Vk, 101: $Vl, 104: $Vm, 105: $Vn, 108: $Vo, 110: $Vp, 112: 111, 113: $Vq, 114: $Vr, 115: $Vs }, { 79: [1, 207] }, o2($Vi1, [2, 107], { 10: [1, 208] }), o2($Vi1, [2, 109], { 10: [1, 209] }), { 79: [1, 210] }, o2($Vj1, [2, 182]), { 79: [1, 211], 97: [1, 212] }, o2($VP, [2, 55], { 112: 111, 44: $Vd, 60: $Ve, 88: $Vk, 101: $Vl, 104: $Vm, 105: $Vn, 108: $Vo, 110: $Vp, 113: $Vq, 114: $Vr, 115: $Vs }), { 31: [1, 213], 67: $Vk1, 81: 214, 115: $Vn1, 116: $Vo1, 117: $Vp1 }, o2($Vt1, [2, 84]), o2($Vt1, [2, 86]), o2($Vt1, [2, 87]), o2($Vt1, [2, 151]), o2($Vt1, [2, 152]), o2($Vt1, [2, 153]), o2($Vt1, [2, 154]), { 49: [1, 215], 67: $Vk1, 81: 214, 115: $Vn1, 116: $Vo1, 117: $Vp1 }, { 30: 216, 67: $Vk1, 79: $Vl1, 80: $Vm1, 81: 168, 115: $Vn1, 116: $Vo1, 117: $Vp1 }, { 51: [1, 217], 67: $Vk1, 81: 214, 115: $Vn1, 116: $Vo1, 117: $Vp1 }, { 53: [1, 218], 67: $Vk1, 81: 214, 115: $Vn1, 116: $Vo1, 117: $Vp1 }, { 55: [1, 219], 67: $Vk1, 81: 214, 115: $Vn1, 116: $Vo1, 117: $Vp1 }, { 57: [1, 220], 67: $Vk1, 81: 214, 115: $Vn1, 116: $Vo1, 117: $Vp1 }, { 60: [1, 221] }, { 64: [1, 222], 67: $Vk1, 81: 214, 115: $Vn1, 116: $Vo1, 117: $Vp1 }, { 66: [1, 223], 67: $Vk1, 81: 214, 115: $Vn1, 116: $Vo1, 117: $Vp1 }, { 30: 224, 67: $Vk1, 79: $Vl1, 80: $Vm1, 81: 168, 115: $Vn1, 116: $Vo1, 117: $Vp1 }, { 31: [1, 225], 67: $Vk1, 81: 214, 115: $Vn1, 116: $Vo1, 117: $Vp1 }, { 67: $Vk1, 69: [1, 226], 71: [1, 227], 81: 214, 115: $Vn1, 116: $Vo1, 117: $Vp1 }, { 67: $Vk1, 69: [1, 229], 71: [1, 228], 81: 214, 115: $Vn1, 116: $Vo1, 117: $Vp1 }, o2($VC, [2, 45], { 18: 152, 10: $Vx, 40: $Vh1 }), o2($VC, [2, 47], { 44: $Vg1 }), o2($VT, [2, 75]), o2($VT, [2, 74]), { 62: [1, 230], 67: $Vk1, 81: 214, 115: $Vn1, 116: $Vo1, 117: $Vp1 }, o2($VT, [2, 77]), o2($Vq1, [2, 79]), { 30: 231, 67: $Vk1, 79: $Vl1, 80: $Vm1, 81: 168, 115: $Vn1, 116: $Vo1, 117: $Vp1 }, o2($Vf1, $V4, { 5: 232 }), o2($Vr1, [2, 100]), o2($Vy, [2, 35]), { 43: 233, 44: $Vd, 45: 39, 47: 40, 60: $Ve, 88: $Vk, 101: $Vl, 104: $Vm, 105: $Vn, 108: $Vo, 110: $Vp, 112: 41, 113: $Vq, 114: $Vr, 115: $Vs }, { 10: $Vx, 18: 234 }, { 10: $Vu1, 60: $Vv1, 83: $Vw1, 91: 235, 104: $Vx1, 106: 236, 107: 237, 108: $Vy1, 109: $Vz1, 110: $VA1, 111: $VB1 }, { 10: $Vu1, 60: $Vv1, 83: $Vw1, 91: 246, 103: [1, 247], 104: $Vx1, 106: 236, 107: 237, 108: $Vy1, 109: $Vz1, 110: $VA1, 111: $VB1 }, { 10: $Vu1, 60: $Vv1, 83: $Vw1, 91: 248, 103: [1, 249], 104: $Vx1, 106: 236, 107: 237, 108: $Vy1, 109: $Vz1, 110: $VA1, 111: $VB1 }, { 104: [1, 250] }, { 10: $Vu1, 60: $Vv1, 83: $Vw1, 91: 251, 104: $Vx1, 106: 236, 107: 237, 108: $Vy1, 109: $Vz1, 110: $VA1, 111: $VB1 }, { 44: $Vd, 47: 252, 60: $Ve, 88: $Vk, 101: $Vl, 104: $Vm, 105: $Vn, 108: $Vo, 110: $Vp, 112: 41, 113: $Vq, 114: $Vr, 115: $Vs }, o2($Vi1, [2, 106]), { 79: [1, 253] }, { 79: [1, 254], 97: [1, 255] }, o2($Vi1, [2, 114]), o2($Vi1, [2, 116], { 10: [1, 256] }), o2($Vi1, [2, 117]), o2($VQ, [2, 56]), o2($Vt1, [2, 85]), o2($VQ, [2, 57]), { 51: [1, 257], 67: $Vk1, 81: 214, 115: $Vn1, 116: $Vo1, 117: $Vp1 }, o2($VQ, [2, 64]), o2($VQ, [2, 59]), o2($VQ, [2, 60]), o2($VQ, [2, 61]), { 108: [1, 258] }, o2($VQ, [2, 63]), o2($VQ, [2, 65]), { 66: [1, 259], 67: $Vk1, 81: 214, 115: $Vn1, 116: $Vo1, 117: $Vp1 }, o2($VQ, [2, 67]), o2($VQ, [2, 68]), o2($VQ, [2, 70]), o2($VQ, [2, 69]), o2($VQ, [2, 71]), o2([10, 44, 60, 88, 101, 104, 105, 108, 110, 113, 114, 115], [2, 83]), { 31: [1, 260], 67: $Vk1, 81: 214, 115: $Vn1, 116: $Vo1, 117: $Vp1 }, { 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, 261], 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 42: 28, 43: 38, 44: $Vd, 45: 39, 47: 40, 60: $Ve, 83: $Vf, 84: $Vg, 85: $Vh, 86: $Vi, 87: $Vj, 88: $Vk, 101: $Vl, 104: $Vm, 105: $Vn, 108: $Vo, 110: $Vp, 112: 41, 113: $Vq, 114: $Vr, 115: $Vs, 120: $Vt, 121: $Vu, 122: $Vv, 123: $Vw }, o2($VP, [2, 53]), { 43: 262, 44: $Vd, 45: 39, 47: 40, 60: $Ve, 88: $Vk, 101: $Vl, 104: $Vm, 105: $Vn, 108: $Vo, 110: $Vp, 112: 41, 113: $Vq, 114: $Vr, 115: $Vs }, o2($Vi1, [2, 119], { 105: $VC1 }), o2($VD1, [2, 128], { 107: 264, 10: $Vu1, 60: $Vv1, 83: $Vw1, 104: $Vx1, 108: $Vy1, 109: $Vz1, 110: $VA1, 111: $VB1 }), o2($VE1, [2, 130]), o2($VE1, [2, 132]), o2($VE1, [2, 133]), o2($VE1, [2, 134]), o2($VE1, [2, 135]), o2($VE1, [2, 136]), o2($VE1, [2, 137]), o2($VE1, [2, 138]), o2($VE1, [2, 139]), o2($Vi1, [2, 120], { 105: $VC1 }), { 10: [1, 265] }, o2($Vi1, [2, 121], { 105: $VC1 }), { 10: [1, 266] }, o2($Vs1, [2, 127]), o2($Vi1, [2, 103], { 105: $VC1 }), o2($Vi1, [2, 104], { 112: 111, 44: $Vd, 60: $Ve, 88: $Vk, 101: $Vl, 104: $Vm, 105: $Vn, 108: $Vo, 110: $Vp, 113: $Vq, 114: $Vr, 115: $Vs }), o2($Vi1, [2, 108]), o2($Vi1, [2, 110], { 10: [1, 267] }), o2($Vi1, [2, 111]), { 97: [1, 268] }, { 51: [1, 269] }, { 62: [1, 270] }, { 66: [1, 271] }, { 8: $Vz, 9: $VA, 11: $VB, 21: 272 }, o2($Vy, [2, 34]), o2($VP, [2, 52]), { 10: $Vu1, 60: $Vv1, 83: $Vw1, 104: $Vx1, 106: 273, 107: 237, 108: $Vy1, 109: $Vz1, 110: $VA1, 111: $VB1 }, o2($VE1, [2, 131]), { 14: $VE, 44: $VF, 60: $VG, 88: $VH, 100: 274, 104: $VI, 105: $VJ, 108: $VK, 110: $VL, 113: $VM, 114: $VN, 115: $VO, 119: 86 }, { 14: $VE, 44: $VF, 60: $VG, 88: $VH, 100: 275, 104: $VI, 105: $VJ, 108: $VK, 110: $VL, 113: $VM, 114: $VN, 115: $VO, 119: 86 }, { 97: [1, 276] }, o2($Vi1, [2, 118]), o2($VQ, [2, 58]), { 30: 277, 67: $Vk1, 79: $Vl1, 80: $Vm1, 81: 168, 115: $Vn1, 116: $Vo1, 117: $Vp1 }, o2($VQ, [2, 66]), o2($Vf1, $V4, { 5: 278 }), o2($VD1, [2, 129], { 107: 264, 10: $Vu1, 60: $Vv1, 83: $Vw1, 104: $Vx1, 108: $Vy1, 109: $Vz1, 110: $VA1, 111: $VB1 }), o2($Vi1, [2, 124], { 119: 164, 10: [1, 279], 14: $VE, 44: $VF, 60: $VG, 88: $VH, 104: $VI, 105: $VJ, 108: $VK, 110: $VL, 113: $VM, 114: $VN, 115: $VO }), o2($Vi1, [2, 125], { 119: 164, 10: [1, 280], 14: $VE, 44: $VF, 60: $VG, 88: $VH, 104: $VI, 105: $VJ, 108: $VK, 110: $VL, 113: $VM, 114: $VN, 115: $VO }), o2($Vi1, [2, 112]), { 31: [1, 281], 67: $Vk1, 81: 214, 115: $Vn1, 116: $Vo1, 117: $Vp1 }, { 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, 282], 33: 24, 34: $Va, 36: $Vb, 38: $Vc, 42: 28, 43: 38, 44: $Vd, 45: 39, 47: 40, 60: $Ve, 83: $Vf, 84: $Vg, 85: $Vh, 86: $Vi, 87: $Vj, 88: $Vk, 101: $Vl, 104: $Vm, 105: $Vn, 108: $Vo, 110: $Vp, 112: 41, 113: $Vq, 114: $Vr, 115: $Vs, 120: $Vt, 121: $Vu, 122: $Vv, 123: $Vw }, { 10: $Vu1, 60: $Vv1, 83: $Vw1, 91: 283, 104: $Vx1, 106: 236, 107: 237, 108: $Vy1, 109: $Vz1, 110: $VA1, 111: $VB1 }, { 10: $Vu1, 60: $Vv1, 83: $Vw1, 91: 284, 104: $Vx1, 106: 236, 107: 237, 108: $Vy1, 109: $Vz1, 110: $VA1, 111: $VB1 }, o2($VQ, [2, 62]), o2($Vy, [2, 33]), o2($Vi1, [2, 122], { 105: $VC1 }), o2($Vi1, [2, 123], { 105: $VC1 })], 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 parse8(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 lexer3 = 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]; } } lexer3.setInput(input, sharedState.yy); sharedState.yy.lexer = lexer3; sharedState.yy.parser = this; if (typeof lexer3.yylloc == "undefined") { lexer3.yylloc = {}; } var yyloc = lexer3.yylloc; lstack.push(yyloc); var ranges = lexer3.options && lexer3.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 lex2() { var token2; token2 = tstack.pop() || lexer3.lex() || EOF2; if (typeof token2 !== "number") { if (token2 instanceof Array) { tstack = token2; token2 = tstack.pop(); } token2 = self2.symbols_[token2] || token2; } return token2; } __name(lex2, "lex"); var symbol, preErrorSymbol, state5, action, a2, r2, yyval = {}, p3, len, newState2, expected; while (true) { state5 = stack[stack.length - 1]; if (this.defaultActions[state5]) { action = this.defaultActions[state5]; } else { if (symbol === null || typeof symbol == "undefined") { symbol = lex2(); } action = table[state5] && table[state5][symbol]; } if (typeof action === "undefined" || !action.length || !action[0]) { var errStr = ""; expected = []; for (p3 in table[state5]) { if (this.terminals_[p3] && p3 > TERROR) { expected.push("'" + this.terminals_[p3] + "'"); } } if (lexer3.showPosition) { errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer3.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: lexer3.match, token: this.terminals_[symbol] || symbol, line: lexer3.yylineno, loc: yyloc, expected }); } if (action[0] instanceof Array && action.length > 1) { throw new Error("Parse Error: multiple actions possible at state: " + state5 + ", token: " + symbol); } switch (action[0]) { case 1: stack.push(symbol); vstack.push(lexer3.yytext); lstack.push(lexer3.yylloc); stack.push(action[1]); symbol = null; if (!preErrorSymbol) { yyleng = lexer3.yyleng; yytext = lexer3.yytext; yylineno = lexer3.yylineno; yyloc = lexer3.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 lexer2 = /* @__PURE__ */ function() { var lexer3 = { 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(match2, 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 = match2[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 + match2[0].length }; this.yytext += match2[0]; this.match += match2[0]; this.matches = match2; 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(match2[0].length); this.matched += match2[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, match2, tempMatch, index; if (!this._more) { this.yytext = ""; this.match = ""; } var rules = this._currentRules(); for (var i2 = 0; i2 < rules.length; i2++) { tempMatch = this._input.match(this.rules[rules[i2]]); if (tempMatch && (!match2 || tempMatch[0].length > match2[0].length)) { match2 = tempMatch; index = i2; if (this.options.backtrack_lexer) { token2 = this.test_match(tempMatch, rules[i2]); if (token2 !== false) { return token2; } else if (this._backtrack) { match2 = false; continue; } else { return false; } } else if (!this.options.flex) { break; } } } if (match2) { token2 = this.test_match(match2, rules[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 lex2() { 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 re2 = /\n\s*/g; yy_.yytext = yy_.yytext.replace(re2, "
    "); 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 94; break; case 17: this.popState(); break; case 18: return 95; 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 83; break; case 26: return 101; break; case 27: return 84; break; case 28: return 103; break; case 29: return 85; break; case 30: return 86; break; case 31: return 96; break; case 32: this.begin("click"); break; case 33: this.popState(); break; case 34: return 87; 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: return 27; break; case 39: return 32; break; case 40: return 97; break; case 41: return 97; break; case 42: return 97; break; case 43: return 97; break; case 44: this.popState(); return 13; break; case 45: this.popState(); return 14; 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: return 120; break; case 56: return 121; break; case 57: return 122; break; case 58: return 123; break; case 59: return 104; break; case 60: return 110; break; case 61: return 46; break; case 62: return 60; break; case 63: return 44; break; case 64: return 8; break; case 65: return 105; break; case 66: return 114; break; case 67: this.popState(); return 77; break; case 68: this.pushState("edgeText"); return 75; break; case 69: return 118; break; case 70: this.popState(); return 77; break; case 71: this.pushState("thickEdgeText"); return 75; break; case 72: return 118; break; case 73: this.popState(); return 77; break; case 74: this.pushState("dottedEdgeText"); return 75; break; case 75: return 118; break; case 76: return 77; break; case 77: this.popState(); return 53; break; case 78: return "TEXT"; break; case 79: this.pushState("ellipseText"); return 52; break; case 80: this.popState(); return 55; break; case 81: this.pushState("text"); return 54; break; case 82: this.popState(); return 57; break; case 83: this.pushState("text"); return 56; break; case 84: return 58; break; case 85: this.pushState("text"); return 67; break; case 86: this.popState(); return 64; break; case 87: this.pushState("text"); return 63; break; case 88: this.popState(); return 49; break; case 89: this.pushState("text"); return 48; break; case 90: this.popState(); return 69; break; case 91: this.popState(); return 71; break; case 92: return 116; break; case 93: this.pushState("trapText"); return 68; break; case 94: this.pushState("trapText"); return 70; break; case 95: return 117; break; case 96: return 67; break; case 97: return 89; break; case 98: return "SEP"; break; case 99: return 88; break; case 100: return 114; break; case 101: return 110; break; case 102: return 44; break; case 103: return 108; break; case 104: return 113; break; case 105: return 115; break; case 106: this.popState(); return 62; break; case 107: this.pushState("text"); return 62; break; case 108: this.popState(); return 51; break; case 109: this.pushState("text"); return 50; break; case 110: this.popState(); return 31; break; case 111: this.pushState("text"); return 29; break; case 112: this.popState(); return 66; break; case 113: this.pushState("text"); return 65; break; case 114: return "TEXT"; break; case 115: return "QUOTE"; break; case 116: return 9; break; case 117: return 10; break; case 118: 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)/, /^(?: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]*)/, /^(?:[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, 76, 79, 81, 83, 87, 89, 93, 94, 107, 109, 111, 113], "inclusive": false }, "shapeDataStr": { "rules": [9, 10, 21, 24, 76, 79, 81, 83, 87, 89, 93, 94, 107, 109, 111, 113], "inclusive": false }, "shapeData": { "rules": [8, 11, 12, 21, 24, 76, 79, 81, 83, 87, 89, 93, 94, 107, 109, 111, 113], "inclusive": false }, "callbackargs": { "rules": [17, 18, 21, 24, 76, 79, 81, 83, 87, 89, 93, 94, 107, 109, 111, 113], "inclusive": false }, "callbackname": { "rules": [14, 15, 16, 21, 24, 76, 79, 81, 83, 87, 89, 93, 94, 107, 109, 111, 113], "inclusive": false }, "href": { "rules": [21, 24, 76, 79, 81, 83, 87, 89, 93, 94, 107, 109, 111, 113], "inclusive": false }, "click": { "rules": [21, 24, 33, 34, 76, 79, 81, 83, 87, 89, 93, 94, 107, 109, 111, 113], "inclusive": false }, "dottedEdgeText": { "rules": [21, 24, 73, 75, 76, 79, 81, 83, 87, 89, 93, 94, 107, 109, 111, 113], "inclusive": false }, "thickEdgeText": { "rules": [21, 24, 70, 72, 76, 79, 81, 83, 87, 89, 93, 94, 107, 109, 111, 113], "inclusive": false }, "edgeText": { "rules": [21, 24, 67, 69, 76, 79, 81, 83, 87, 89, 93, 94, 107, 109, 111, 113], "inclusive": false }, "trapText": { "rules": [21, 24, 76, 79, 81, 83, 87, 89, 90, 91, 92, 93, 94, 107, 109, 111, 113], "inclusive": false }, "ellipseText": { "rules": [21, 24, 76, 77, 78, 79, 81, 83, 87, 89, 93, 94, 107, 109, 111, 113], "inclusive": false }, "text": { "rules": [21, 24, 76, 79, 80, 81, 82, 83, 86, 87, 88, 89, 93, 94, 106, 107, 108, 109, 110, 111, 112, 113, 114], "inclusive": false }, "vertex": { "rules": [21, 24, 76, 79, 81, 83, 87, 89, 93, 94, 107, 109, 111, 113], "inclusive": false }, "dir": { "rules": [21, 24, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 76, 79, 81, 83, 87, 89, 93, 94, 107, 109, 111, 113], "inclusive": false }, "acc_descr_multiline": { "rules": [5, 6, 21, 24, 76, 79, 81, 83, 87, 89, 93, 94, 107, 109, 111, 113], "inclusive": false }, "acc_descr": { "rules": [3, 21, 24, 76, 79, 81, 83, 87, 89, 93, 94, 107, 109, 111, 113], "inclusive": false }, "acc_title": { "rules": [1, 21, 24, 76, 79, 81, 83, 87, 89, 93, 94, 107, 109, 111, 113], "inclusive": false }, "md_string": { "rules": [19, 20, 21, 24, 76, 79, 81, 83, 87, 89, 93, 94, 107, 109, 111, 113], "inclusive": false }, "string": { "rules": [21, 22, 23, 24, 76, 79, 81, 83, 87, 89, 93, 94, 107, 109, 111, 113], "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, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 70, 71, 73, 74, 76, 79, 81, 83, 84, 85, 87, 89, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 107, 109, 111, 113, 115, 116, 117, 118], "inclusive": true } } }; return lexer3; }(); parser23.lexer = lexer2; function Parser3() { this.yy = {}; } __name(Parser3, "Parser"); Parser3.prototype = parser23; parser23.Parser = Parser3; return new Parser3(); }(); parser3.parser = parser3; flow_default = parser3; } }); // src/diagrams/flowchart/styles.ts var fade, getStyles3, styles_default3; var init_styles3 = __esm({ "src/diagrams/flowchart/styles.ts"() { "use strict"; init_dist(); fade = /* @__PURE__ */ __name((color2, opacity) => { const channel2 = channel_default2; const r2 = channel2(color2, "r"); const g2 = channel2(color2, "g"); const b2 = channel2(color2, "b"); return rgba_default(r2, g2, b2, opacity); }, "fade"); getStyles3 = /* @__PURE__ */ __name((options3) => `.label { font-family: ${options3.fontFamily}; color: ${options3.nodeTextColor || options3.textColor}; } .cluster-label text { fill: ${options3.titleColor}; } .cluster-label span { color: ${options3.titleColor}; } .cluster-label span p { background-color: transparent; } .label text,span { fill: ${options3.nodeTextColor || options3.textColor}; color: ${options3.nodeTextColor || options3.textColor}; } .node rect, .node circle, .node ellipse, .node polygon, .node path { fill: ${options3.mainBkg}; stroke: ${options3.nodeBorder}; stroke-width: 1px; } .rough-node .label text , .node .label text, .image-shape .label, .icon-shape .label { text-anchor: middle; } // .flowchart-label .text-outer-tspan { // text-anchor: middle; // } // .flowchart-label .text-inner-tspan { // text-anchor: start; // } .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: ${options3.lineColor} !important; stroke-width: 0; stroke: ${options3.lineColor}; } .arrowheadPath { fill: ${options3.arrowheadColor}; } .edgePath .path { stroke: ${options3.lineColor}; stroke-width: 2.0px; } .flowchart-link { stroke: ${options3.lineColor}; fill: none; } .edgeLabel { background-color: ${options3.edgeLabelBackground}; p { background-color: ${options3.edgeLabelBackground}; } rect { opacity: 0.5; background-color: ${options3.edgeLabelBackground}; fill: ${options3.edgeLabelBackground}; } text-align: center; } /* For html labels only */ .labelBkg { background-color: ${fade(options3.edgeLabelBackground, 0.5)}; // background-color: } .cluster rect { fill: ${options3.clusterBkg}; stroke: ${options3.clusterBorder}; stroke-width: 1px; } .cluster text { fill: ${options3.titleColor}; } .cluster span { color: ${options3.titleColor}; } /* .cluster div { color: ${options3.titleColor}; } */ div.mermaidTooltip { position: absolute; text-align: center; max-width: 200px; padding: 2px; font-family: ${options3.fontFamily}; font-size: 12px; background: ${options3.tertiaryColor}; border: 1px solid ${options3.border2}; border-radius: 2px; pointer-events: none; z-index: 100; } .flowchartTitleText { text-anchor: middle; font-size: 18px; fill: ${options3.textColor}; } rect.text { fill: none; stroke-width: 0; } .icon-shape, .image-shape { background-color: ${options3.edgeLabelBackground}; p { background-color: ${options3.edgeLabelBackground}; padding: 2px; } rect { opacity: 0.5; background-color: ${options3.edgeLabelBackground}; fill: ${options3.edgeLabelBackground}; } text-align: center; } `, "getStyles"); styles_default3 = getStyles3; } }); // src/diagrams/flowchart/flowDiagram.ts var flowDiagram_exports = {}; __export(flowDiagram_exports, { diagram: () => diagram2 }); var diagram2; var init_flowDiagram = __esm({ "src/diagrams/flowchart/flowDiagram.ts"() { "use strict"; init_diagramAPI(); init_flowDb(); init_flowRenderer_v3_unified(); init_flow(); init_styles3(); diagram2 = { parser: flow_default, db: flowDb_default, renderer: flowRenderer_v3_unified_default, styles: styles_default3, init: /* @__PURE__ */ __name((cnf) => { if (!cnf.flowchart) { cnf.flowchart = {}; } if (cnf.layout) { setConfig2({ layout: cnf.layout }); } cnf.flowchart.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; setConfig2({ flowchart: { arrowMarkerAbsolute: cnf.arrowMarkerAbsolute } }); flowDb_default.clear(); flowDb_default.setGen("gen-2"); }, "init") }; } }); // src/diagrams/er/parser/erDiagram.jison var parser4, erDiagram_default; var init_erDiagram = __esm({ "src/diagrams/er/parser/erDiagram.jison"() { "use strict"; parser4 = function() { var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l2) { for (o3 = o3 || {}, l2 = k2.length; l2--; o3[k2[l2]] = v3) ; return o3; }, "o"), $V0 = [6, 8, 10, 20, 22, 24, 26, 27, 28], $V1 = [1, 10], $V2 = [1, 11], $V3 = [1, 12], $V4 = [1, 13], $V5 = [1, 14], $V6 = [1, 15], $V7 = [1, 21], $V8 = [1, 22], $V9 = [1, 23], $Va = [1, 24], $Vb = [1, 25], $Vc = [6, 8, 10, 13, 15, 18, 19, 20, 22, 24, 26, 27, 28, 41, 42, 43, 44, 45], $Vd = [1, 34], $Ve = [27, 28, 46, 47], $Vf = [41, 42, 43, 44, 45], $Vg = [17, 34], $Vh = [1, 54], $Vi = [1, 53], $Vj = [17, 34, 36, 38]; var parser23 = { 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, ":": 13, "role": 14, "BLOCK_START": 15, "attributes": 16, "BLOCK_STOP": 17, "SQS": 18, "SQE": 19, "title": 20, "title_value": 21, "acc_title": 22, "acc_title_value": 23, "acc_descr": 24, "acc_descr_value": 25, "acc_descr_multiline_value": 26, "ALPHANUM": 27, "ENTITY_NAME": 28, "attribute": 29, "attributeType": 30, "attributeName": 31, "attributeKeyTypeList": 32, "attributeComment": 33, "ATTRIBUTE_WORD": 34, "attributeKeyType": 35, "COMMA": 36, "ATTRIBUTE_KEY": 37, "COMMENT": 38, "cardinality": 39, "relType": 40, "ZERO_OR_ONE": 41, "ZERO_OR_MORE": 42, "ONE_OR_MORE": 43, "ONLY_ONE": 44, "MD_PARENT": 45, "NON_IDENTIFYING": 46, "IDENTIFYING": 47, "WORD": 48, "$accept": 0, "$end": 1 }, terminals_: { 2: "error", 4: "ER_DIAGRAM", 6: "EOF", 8: "SPACE", 10: "NEWLINE", 13: ":", 15: "BLOCK_START", 17: "BLOCK_STOP", 18: "SQS", 19: "SQE", 20: "title", 21: "title_value", 22: "acc_title", 23: "acc_title_value", 24: "acc_descr", 25: "acc_descr_value", 26: "acc_descr_multiline_value", 27: "ALPHANUM", 28: "ENTITY_NAME", 34: "ATTRIBUTE_WORD", 36: "COMMA", 37: "ATTRIBUTE_KEY", 38: "COMMENT", 41: "ZERO_OR_ONE", 42: "ZERO_OR_MORE", 43: "ONE_OR_MORE", 44: "ONLY_ONE", 45: "MD_PARENT", 46: "NON_IDENTIFYING", 47: "IDENTIFYING", 48: "WORD" }, productions_: [0, [3, 3], [5, 0], [5, 2], [7, 2], [7, 1], [7, 1], [7, 1], [9, 5], [9, 4], [9, 3], [9, 1], [9, 7], [9, 6], [9, 4], [9, 2], [9, 2], [9, 2], [9, 1], [11, 1], [11, 1], [16, 1], [16, 2], [29, 2], [29, 3], [29, 3], [29, 4], [30, 1], [31, 1], [32, 1], [32, 3], [35, 1], [33, 1], [12, 3], [39, 1], [39, 1], [39, 1], [39, 1], [39, 1], [40, 1], [40, 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 - 3]); yy.addAttributes($$[$0 - 3], $$[$0 - 1]); break; case 10: yy.addEntity($$[$0 - 2]); break; case 11: yy.addEntity($$[$0]); break; case 12: yy.addEntity($$[$0 - 6], $$[$0 - 4]); yy.addAttributes($$[$0 - 6], $$[$0 - 1]); break; case 13: yy.addEntity($$[$0 - 5], $$[$0 - 3]); break; case 14: yy.addEntity($$[$0 - 3], $$[$0 - 1]); break; case 15: case 16: this.$ = $$[$0].trim(); yy.setAccTitle(this.$); break; case 17: case 18: this.$ = $$[$0].trim(); yy.setAccDescription(this.$); break; case 19: case 43: this.$ = $$[$0]; break; case 20: case 41: case 42: this.$ = $$[$0].replace(/"/g, ""); break; case 21: case 29: this.$ = [$$[$0]]; break; case 22: $$[$0].push($$[$0 - 1]); this.$ = $$[$0]; break; case 23: this.$ = { attributeType: $$[$0 - 1], attributeName: $$[$0] }; break; case 24: this.$ = { attributeType: $$[$0 - 2], attributeName: $$[$0 - 1], attributeKeyTypeList: $$[$0] }; break; case 25: this.$ = { attributeType: $$[$0 - 2], attributeName: $$[$0 - 1], attributeComment: $$[$0] }; break; case 26: this.$ = { attributeType: $$[$0 - 3], attributeName: $$[$0 - 2], attributeKeyTypeList: $$[$0 - 1], attributeComment: $$[$0] }; break; case 27: case 28: case 31: this.$ = $$[$0]; break; case 30: $$[$0 - 2].push($$[$0]); this.$ = $$[$0 - 2]; break; case 32: this.$ = $$[$0].replace(/"/g, ""); break; case 33: this.$ = { cardA: $$[$0], relType: $$[$0 - 1], cardB: $$[$0 - 2] }; break; case 34: this.$ = yy.Cardinality.ZERO_OR_ONE; break; case 35: this.$ = yy.Cardinality.ZERO_OR_MORE; break; case 36: this.$ = yy.Cardinality.ONE_OR_MORE; break; case 37: this.$ = yy.Cardinality.ONLY_ONE; break; case 38: this.$ = yy.Cardinality.MD_PARENT; break; case 39: this.$ = yy.Identification.NON_IDENTIFYING; break; case 40: 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, 20: $V1, 22: $V2, 24: $V3, 26: $V4, 27: $V5, 28: $V6 }, o2($V0, [2, 7], { 1: [2, 1] }), o2($V0, [2, 3]), { 9: 16, 11: 9, 20: $V1, 22: $V2, 24: $V3, 26: $V4, 27: $V5, 28: $V6 }, o2($V0, [2, 5]), o2($V0, [2, 6]), o2($V0, [2, 11], { 12: 17, 39: 20, 15: [1, 18], 18: [1, 19], 41: $V7, 42: $V8, 43: $V9, 44: $Va, 45: $Vb }), { 21: [1, 26] }, { 23: [1, 27] }, { 25: [1, 28] }, o2($V0, [2, 18]), o2($Vc, [2, 19]), o2($Vc, [2, 20]), o2($V0, [2, 4]), { 11: 29, 27: $V5, 28: $V6 }, { 16: 30, 17: [1, 31], 29: 32, 30: 33, 34: $Vd }, { 11: 35, 27: $V5, 28: $V6 }, { 40: 36, 46: [1, 37], 47: [1, 38] }, o2($Ve, [2, 34]), o2($Ve, [2, 35]), o2($Ve, [2, 36]), o2($Ve, [2, 37]), o2($Ve, [2, 38]), o2($V0, [2, 15]), o2($V0, [2, 16]), o2($V0, [2, 17]), { 13: [1, 39] }, { 17: [1, 40] }, o2($V0, [2, 10]), { 16: 41, 17: [2, 21], 29: 32, 30: 33, 34: $Vd }, { 31: 42, 34: [1, 43] }, { 34: [2, 27] }, { 19: [1, 44] }, { 39: 45, 41: $V7, 42: $V8, 43: $V9, 44: $Va, 45: $Vb }, o2($Vf, [2, 39]), o2($Vf, [2, 40]), { 14: 46, 27: [1, 49], 28: [1, 48], 48: [1, 47] }, o2($V0, [2, 9]), { 17: [2, 22] }, o2($Vg, [2, 23], { 32: 50, 33: 51, 35: 52, 37: $Vh, 38: $Vi }), o2([17, 34, 37, 38], [2, 28]), o2($V0, [2, 14], { 15: [1, 55] }), o2([27, 28], [2, 33]), o2($V0, [2, 8]), o2($V0, [2, 41]), o2($V0, [2, 42]), o2($V0, [2, 43]), o2($Vg, [2, 24], { 33: 56, 36: [1, 57], 38: $Vi }), o2($Vg, [2, 25]), o2($Vj, [2, 29]), o2($Vg, [2, 32]), o2($Vj, [2, 31]), { 16: 58, 17: [1, 59], 29: 32, 30: 33, 34: $Vd }, o2($Vg, [2, 26]), { 35: 60, 37: $Vh }, { 17: [1, 61] }, o2($V0, [2, 13]), o2($Vj, [2, 30]), o2($V0, [2, 12])], defaultActions: { 34: [2, 27], 41: [2, 22] }, 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 parse8(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 lexer3 = 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]; } } lexer3.setInput(input, sharedState.yy); sharedState.yy.lexer = lexer3; sharedState.yy.parser = this; if (typeof lexer3.yylloc == "undefined") { lexer3.yylloc = {}; } var yyloc = lexer3.yylloc; lstack.push(yyloc); var ranges = lexer3.options && lexer3.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 lex2() { var token2; token2 = tstack.pop() || lexer3.lex() || EOF2; if (typeof token2 !== "number") { if (token2 instanceof Array) { tstack = token2; token2 = tstack.pop(); } token2 = self2.symbols_[token2] || token2; } return token2; } __name(lex2, "lex"); var symbol, preErrorSymbol, state5, action, a2, r2, yyval = {}, p3, len, newState2, expected; while (true) { state5 = stack[stack.length - 1]; if (this.defaultActions[state5]) { action = this.defaultActions[state5]; } else { if (symbol === null || typeof symbol == "undefined") { symbol = lex2(); } action = table[state5] && table[state5][symbol]; } if (typeof action === "undefined" || !action.length || !action[0]) { var errStr = ""; expected = []; for (p3 in table[state5]) { if (this.terminals_[p3] && p3 > TERROR) { expected.push("'" + this.terminals_[p3] + "'"); } } if (lexer3.showPosition) { errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer3.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: lexer3.match, token: this.terminals_[symbol] || symbol, line: lexer3.yylineno, loc: yyloc, expected }); } if (action[0] instanceof Array && action.length > 1) { throw new Error("Parse Error: multiple actions possible at state: " + state5 + ", token: " + symbol); } switch (action[0]) { case 1: stack.push(symbol); vstack.push(lexer3.yytext); lstack.push(lexer3.yylloc); stack.push(action[1]); symbol = null; if (!preErrorSymbol) { yyleng = lexer3.yyleng; yytext = lexer3.yytext; yylineno = lexer3.yylineno; yyloc = lexer3.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 lexer2 = /* @__PURE__ */ function() { var lexer3 = { 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(match2, 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 = match2[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 + match2[0].length }; this.yytext += match2[0]; this.match += match2[0]; this.matches = match2; 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(match2[0].length); this.matched += match2[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, match2, tempMatch, index; if (!this._more) { this.yytext = ""; this.match = ""; } var rules = this._currentRules(); for (var i2 = 0; i2 < rules.length; i2++) { tempMatch = this._input.match(this.rules[rules[i2]]); if (tempMatch && (!match2 || tempMatch[0].length > match2[0].length)) { match2 = tempMatch; index = i2; if (this.options.backtrack_lexer) { token2 = this.test_match(tempMatch, rules[i2]); if (token2 !== false) { return token2; } else if (this._backtrack) { match2 = false; continue; } else { return false; } } else if (!this.options.flex) { break; } } } if (match2) { token2 = this.test_match(match2, rules[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 lex2() { 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 22; break; case 1: this.popState(); return "acc_title_value"; break; case 2: this.begin("acc_descr"); return 24; 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 10; break; case 8: break; case 9: return 8; break; case 10: return 28; break; case 11: return 48; break; case 12: return 4; break; case 13: this.begin("block"); return 15; break; case 14: return 36; break; case 15: break; case 16: return 37; break; case 17: return 34; break; case 18: return 34; break; case 19: return 38; break; case 20: break; case 21: this.popState(); return 17; break; case 22: return yy_.yytext[0]; break; case 23: return 18; break; case 24: return 19; break; case 25: return 41; break; case 26: return 43; break; case 27: return 43; break; case 28: return 43; break; case 29: return 41; break; case 30: return 41; break; case 31: return 42; break; case 32: return 42; break; case 33: return 42; break; case 34: return 42; break; case 35: return 42; break; case 36: return 43; break; case 37: return 42; break; case 38: return 43; break; case 39: return 44; break; case 40: return 44; break; case 41: return 44; break; case 42: return 44; break; case 43: return 41; break; case 44: return 42; break; case 45: return 43; break; case 46: return 45; break; case 47: return 46; break; case 48: return 47; break; case 49: return 47; break; case 50: return 46; break; case 51: return 46; break; case 52: return 46; break; case 53: return 27; break; case 54: return yy_.yytext[0]; break; case 55: 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, /^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:[\s]+)/i, /^(?:"[^"%\r\n\v\b\\]+")/i, /^(?:"[^"]*")/i, /^(?:erDiagram\b)/i, /^(?:\{)/i, /^(?:,)/i, /^(?:\s+)/i, /^(?:\b((?:PK)|(?:FK)|(?:UK))\b)/i, /^(?:(.*?)[~](.*?)*[~])/i, /^(?:[\*A-Za-z_][A-Za-z0-9\-_\[\]\(\)]*)/i, /^(?:"[^"]*")/i, /^(?:[\n]+)/i, /^(?:\})/i, /^(?:.)/i, /^(?:\[)/i, /^(?:\])/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, /^(?:1\b)/i, /^(?:\|\|)/i, /^(?:o\|)/i, /^(?:o\{)/i, /^(?:\|\{)/i, /^(?:\s*u\b)/i, /^(?:\.\.)/i, /^(?:--)/i, /^(?:to\b)/i, /^(?:optionally to\b)/i, /^(?:\.-)/i, /^(?:-\.)/i, /^(?:[A-Za-z_][A-Za-z0-9\-_]*)/i, /^(?:.)/i, /^(?:$)/i], conditions: { "acc_descr_multiline": { "rules": [5, 6], "inclusive": false }, "acc_descr": { "rules": [3], "inclusive": false }, "acc_title": { "rules": [1], "inclusive": false }, "block": { "rules": [14, 15, 16, 17, 18, 19, 20, 21, 22], "inclusive": false }, "INITIAL": { "rules": [0, 2, 4, 7, 8, 9, 10, 11, 12, 13, 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], "inclusive": true } } }; return lexer3; }(); parser23.lexer = lexer2; function Parser3() { this.yy = {}; } __name(Parser3, "Parser"); Parser3.prototype = parser23; parser23.Parser = Parser3; return new Parser3(); }(); parser4.parser = parser4; erDiagram_default = parser4; } }); // src/diagrams/er/erDb.js var entities, relationships, Cardinality, Identification, addEntity, getEntities, addAttributes, addRelationship, getRelationships, clear8, erDb_default; var init_erDb = __esm({ "src/diagrams/er/erDb.js"() { "use strict"; init_logger(); init_diagramAPI(); init_commonDb(); entities = /* @__PURE__ */ new Map(); relationships = []; 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" }; Identification = { NON_IDENTIFYING: "NON_IDENTIFYING", IDENTIFYING: "IDENTIFYING" }; addEntity = /* @__PURE__ */ __name(function(name, alias = void 0) { if (!entities.has(name)) { entities.set(name, { attributes: [], alias }); log.info("Added new entity :", name); } else if (!entities.get(name).alias && alias) { entities.get(name).alias = alias; log.info(`Add alias '${alias}' to entity '${name}'`); } return entities.get(name); }, "addEntity"); getEntities = /* @__PURE__ */ __name(() => entities, "getEntities"); addAttributes = /* @__PURE__ */ __name(function(entityName, attribs) { let entity = addEntity(entityName); let i2; for (i2 = attribs.length - 1; i2 >= 0; i2--) { entity.attributes.push(attribs[i2]); log.debug("Added attribute ", attribs[i2].attributeName); } }, "addAttributes"); addRelationship = /* @__PURE__ */ __name(function(entA, rolA, entB, rSpec) { let rel2 = { entityA: entA, roleA: rolA, entityB: entB, relSpec: rSpec }; relationships.push(rel2); log.debug("Added new relationship :", rel2); }, "addRelationship"); getRelationships = /* @__PURE__ */ __name(() => relationships, "getRelationships"); clear8 = /* @__PURE__ */ __name(function() { entities = /* @__PURE__ */ new Map(); relationships = []; clear(); }, "clear"); erDb_default = { Cardinality, Identification, getConfig: /* @__PURE__ */ __name(() => getConfig2().er, "getConfig"), addEntity, addAttributes, getEntities, addRelationship, getRelationships, clear: clear8, setAccTitle, getAccTitle, setAccDescription, getAccDescription, setDiagramTitle, getDiagramTitle }; } }); // src/diagrams/er/erMarkers.js var ERMarkers, insertMarkers2, erMarkers_default; var init_erMarkers = __esm({ "src/diagrams/er/erMarkers.js"() { "use strict"; ERMarkers = { ONLY_ONE_START: "ONLY_ONE_START", ONLY_ONE_END: "ONLY_ONE_END", ZERO_OR_ONE_START: "ZERO_OR_ONE_START", ZERO_OR_ONE_END: "ZERO_OR_ONE_END", ONE_OR_MORE_START: "ONE_OR_MORE_START", ONE_OR_MORE_END: "ONE_OR_MORE_END", ZERO_OR_MORE_START: "ZERO_OR_MORE_START", ZERO_OR_MORE_END: "ZERO_OR_MORE_END", MD_PARENT_END: "MD_PARENT_END", MD_PARENT_START: "MD_PARENT_START" }; insertMarkers2 = /* @__PURE__ */ __name(function(elem, conf7) { let marker; elem.append("defs").append("marker").attr("id", ERMarkers.MD_PARENT_START).attr("refX", 0).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", ERMarkers.MD_PARENT_END).attr("refX", 19).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", ERMarkers.ONLY_ONE_START).attr("refX", 0).attr("refY", 9).attr("markerWidth", 18).attr("markerHeight", 18).attr("orient", "auto").append("path").attr("stroke", conf7.stroke).attr("fill", "none").attr("d", "M9,0 L9,18 M15,0 L15,18"); elem.append("defs").append("marker").attr("id", ERMarkers.ONLY_ONE_END).attr("refX", 18).attr("refY", 9).attr("markerWidth", 18).attr("markerHeight", 18).attr("orient", "auto").append("path").attr("stroke", conf7.stroke).attr("fill", "none").attr("d", "M3,0 L3,18 M9,0 L9,18"); marker = elem.append("defs").append("marker").attr("id", ERMarkers.ZERO_OR_ONE_START).attr("refX", 0).attr("refY", 9).attr("markerWidth", 30).attr("markerHeight", 18).attr("orient", "auto"); marker.append("circle").attr("stroke", conf7.stroke).attr("fill", "white").attr("cx", 21).attr("cy", 9).attr("r", 6); marker.append("path").attr("stroke", conf7.stroke).attr("fill", "none").attr("d", "M9,0 L9,18"); marker = elem.append("defs").append("marker").attr("id", ERMarkers.ZERO_OR_ONE_END).attr("refX", 30).attr("refY", 9).attr("markerWidth", 30).attr("markerHeight", 18).attr("orient", "auto"); marker.append("circle").attr("stroke", conf7.stroke).attr("fill", "white").attr("cx", 9).attr("cy", 9).attr("r", 6); marker.append("path").attr("stroke", conf7.stroke).attr("fill", "none").attr("d", "M21,0 L21,18"); elem.append("defs").append("marker").attr("id", ERMarkers.ONE_OR_MORE_START).attr("refX", 18).attr("refY", 18).attr("markerWidth", 45).attr("markerHeight", 36).attr("orient", "auto").append("path").attr("stroke", conf7.stroke).attr("fill", "none").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", ERMarkers.ONE_OR_MORE_END).attr("refX", 27).attr("refY", 18).attr("markerWidth", 45).attr("markerHeight", 36).attr("orient", "auto").append("path").attr("stroke", conf7.stroke).attr("fill", "none").attr("d", "M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18"); marker = elem.append("defs").append("marker").attr("id", ERMarkers.ZERO_OR_MORE_START).attr("refX", 18).attr("refY", 18).attr("markerWidth", 57).attr("markerHeight", 36).attr("orient", "auto"); marker.append("circle").attr("stroke", conf7.stroke).attr("fill", "white").attr("cx", 48).attr("cy", 18).attr("r", 6); marker.append("path").attr("stroke", conf7.stroke).attr("fill", "none").attr("d", "M0,18 Q18,0 36,18 Q18,36 0,18"); marker = elem.append("defs").append("marker").attr("id", ERMarkers.ZERO_OR_MORE_END).attr("refX", 39).attr("refY", 18).attr("markerWidth", 57).attr("markerHeight", 36).attr("orient", "auto"); marker.append("circle").attr("stroke", conf7.stroke).attr("fill", "white").attr("cx", 9).attr("cy", 18).attr("r", 6); marker.append("path").attr("stroke", conf7.stroke).attr("fill", "none").attr("d", "M21,18 Q39,0 57,18 Q39,36 21,18"); return; }, "insertMarkers"); erMarkers_default = { ERMarkers, insertMarkers: insertMarkers2 }; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/uuid/dist/esm-browser/regex.js var regex_default; var init_regex = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/uuid/dist/esm-browser/regex.js"() { "use strict"; regex_default = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/uuid/dist/esm-browser/validate.js function validate(uuid3) { return typeof uuid3 === "string" && regex_default.test(uuid3); } var validate_default; var init_validate = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/uuid/dist/esm-browser/validate.js"() { "use strict"; init_regex(); __name(validate, "validate"); validate_default = validate; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/uuid/dist/esm-browser/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]]; } var byteToHex; var init_stringify = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/uuid/dist/esm-browser/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/[email protected]/node_modules/uuid/dist/esm-browser/parse.js function parse(uuid3) { if (!validate_default(uuid3)) { throw TypeError("Invalid UUID"); } let v3; const arr = new Uint8Array(16); arr[0] = (v3 = parseInt(uuid3.slice(0, 8), 16)) >>> 24; arr[1] = v3 >>> 16 & 255; arr[2] = v3 >>> 8 & 255; arr[3] = v3 & 255; arr[4] = (v3 = parseInt(uuid3.slice(9, 13), 16)) >>> 8; arr[5] = v3 & 255; arr[6] = (v3 = parseInt(uuid3.slice(14, 18), 16)) >>> 8; arr[7] = v3 & 255; arr[8] = (v3 = parseInt(uuid3.slice(19, 23), 16)) >>> 8; arr[9] = v3 & 255; arr[10] = (v3 = parseInt(uuid3.slice(24, 36), 16)) / 1099511627776 & 255; arr[11] = v3 / 4294967296 & 255; arr[12] = v3 >>> 24 & 255; arr[13] = v3 >>> 16 & 255; arr[14] = v3 >>> 8 & 255; arr[15] = v3 & 255; return arr; } var parse_default; var init_parse2 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/uuid/dist/esm-browser/parse.js"() { "use strict"; init_validate(); __name(parse, "parse"); parse_default = parse; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/uuid/dist/esm-browser/v35.js function stringToBytes(str2) { str2 = unescape(encodeURIComponent(str2)); const bytes = []; for (let i2 = 0; i2 < str2.length; ++i2) { bytes.push(str2.charCodeAt(i2)); } return bytes; } function v35(name, version4, hashfunc) { function generateUUID(value2, namespace, buf, offset) { var _namespace; if (typeof value2 === "string") { value2 = stringToBytes(value2); } if (typeof namespace === "string") { namespace = parse_default(namespace); } if (((_namespace = namespace) === null || _namespace === void 0 ? void 0 : _namespace.length) !== 16) { throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)"); } let bytes = new Uint8Array(16 + value2.length); bytes.set(namespace); bytes.set(value2, namespace.length); bytes = hashfunc(bytes); bytes[6] = bytes[6] & 15 | version4; bytes[8] = bytes[8] & 63 | 128; if (buf) { offset = offset || 0; for (let i2 = 0; i2 < 16; ++i2) { buf[offset + i2] = bytes[i2]; } return buf; } return unsafeStringify(bytes); } __name(generateUUID, "generateUUID"); try { generateUUID.name = name; } catch (err) { } generateUUID.DNS = DNS; generateUUID.URL = URL2; return generateUUID; } var DNS, URL2; var init_v35 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/uuid/dist/esm-browser/v35.js"() { "use strict"; init_stringify(); init_parse2(); __name(stringToBytes, "stringToBytes"); DNS = "6ba7b810-9dad-11d1-80b4-00c04fd430c8"; URL2 = "6ba7b811-9dad-11d1-80b4-00c04fd430c8"; __name(v35, "v35"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/uuid/dist/esm-browser/sha1.js function f2(s2, x5, y5, z2) { switch (s2) { case 0: return x5 & y5 ^ ~x5 & z2; case 1: return x5 ^ y5 ^ z2; case 2: return x5 & y5 ^ x5 & z2 ^ y5 & z2; case 3: return x5 ^ y5 ^ z2; } } function ROTL(x5, n2) { return x5 << n2 | x5 >>> 32 - n2; } function sha1(bytes) { const K4 = [1518500249, 1859775393, 2400959708, 3395469782]; const H2 = [1732584193, 4023233417, 2562383102, 271733878, 3285377520]; if (typeof bytes === "string") { const msg = unescape(encodeURIComponent(bytes)); bytes = []; for (let i2 = 0; i2 < msg.length; ++i2) { bytes.push(msg.charCodeAt(i2)); } } else if (!Array.isArray(bytes)) { bytes = Array.prototype.slice.call(bytes); } bytes.push(128); const l2 = bytes.length / 4 + 2; const N2 = Math.ceil(l2 / 16); const M2 = new Array(N2); for (let i2 = 0; i2 < N2; ++i2) { const arr = new Uint32Array(16); for (let j2 = 0; j2 < 16; ++j2) { arr[j2] = bytes[i2 * 64 + j2 * 4] << 24 | bytes[i2 * 64 + j2 * 4 + 1] << 16 | bytes[i2 * 64 + j2 * 4 + 2] << 8 | bytes[i2 * 64 + j2 * 4 + 3]; } M2[i2] = arr; } M2[N2 - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32); M2[N2 - 1][14] = Math.floor(M2[N2 - 1][14]); M2[N2 - 1][15] = (bytes.length - 1) * 8 & 4294967295; for (let i2 = 0; i2 < N2; ++i2) { const W2 = new Uint32Array(80); for (let t4 = 0; t4 < 16; ++t4) { W2[t4] = M2[i2][t4]; } for (let t4 = 16; t4 < 80; ++t4) { W2[t4] = ROTL(W2[t4 - 3] ^ W2[t4 - 8] ^ W2[t4 - 14] ^ W2[t4 - 16], 1); } let a2 = H2[0]; let b2 = H2[1]; let c3 = H2[2]; let d2 = H2[3]; let e3 = H2[4]; for (let t4 = 0; t4 < 80; ++t4) { const s2 = Math.floor(t4 / 20); const T3 = ROTL(a2, 5) + f2(s2, b2, c3, d2) + e3 + K4[s2] + W2[t4] >>> 0; e3 = d2; d2 = c3; c3 = ROTL(b2, 30) >>> 0; b2 = a2; a2 = T3; } H2[0] = H2[0] + a2 >>> 0; H2[1] = H2[1] + b2 >>> 0; H2[2] = H2[2] + c3 >>> 0; H2[3] = H2[3] + d2 >>> 0; H2[4] = H2[4] + e3 >>> 0; } return [H2[0] >> 24 & 255, H2[0] >> 16 & 255, H2[0] >> 8 & 255, H2[0] & 255, H2[1] >> 24 & 255, H2[1] >> 16 & 255, H2[1] >> 8 & 255, H2[1] & 255, H2[2] >> 24 & 255, H2[2] >> 16 & 255, H2[2] >> 8 & 255, H2[2] & 255, H2[3] >> 24 & 255, H2[3] >> 16 & 255, H2[3] >> 8 & 255, H2[3] & 255, H2[4] >> 24 & 255, H2[4] >> 16 & 255, H2[4] >> 8 & 255, H2[4] & 255]; } var sha1_default; var init_sha1 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/uuid/dist/esm-browser/sha1.js"() { "use strict"; __name(f2, "f"); __name(ROTL, "ROTL"); __name(sha1, "sha1"); sha1_default = sha1; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/uuid/dist/esm-browser/v5.js var v5, v5_default; var init_v5 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/uuid/dist/esm-browser/v5.js"() { "use strict"; init_v35(); init_sha1(); v5 = v35("v5", 80, sha1_default); v5_default = v5; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/uuid/dist/esm-browser/index.js var init_esm_browser = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/uuid/dist/esm-browser/index.js"() { "use strict"; init_v5(); } }); // src/diagrams/er/erRenderer.js function generateId2(str2 = "", prefix = "") { const simplifiedStr = str2.replace(BAD_ID_CHARS_REGEXP, ""); return `${strWithHyphen(prefix)}${strWithHyphen(simplifiedStr)}${v5_default( str2, MERMAID_ERDIAGRAM_UUID )}`; } function strWithHyphen(str2 = "") { return str2.length > 0 ? `${str2}-` : ""; } var BAD_ID_CHARS_REGEXP, conf2, entityNameIds, setConf2, drawAttributes, drawEntities, adjustEntities, getEdgeName, addRelationships, relCnt, drawRelationshipFromLayout, draw3, MERMAID_ERDIAGRAM_UUID, erRenderer_default; var init_erRenderer = __esm({ "src/diagrams/er/erRenderer.js"() { "use strict"; init_graphlib(); init_src32(); init_dagre(); init_diagramAPI(); init_logger(); init_utils2(); init_erMarkers(); init_setupGraphViewbox(); init_common(); init_esm_browser(); BAD_ID_CHARS_REGEXP = /[^\dA-Za-z](\W)*/g; conf2 = {}; entityNameIds = /* @__PURE__ */ new Map(); setConf2 = /* @__PURE__ */ __name(function(cnf) { const keys3 = Object.keys(cnf); for (const key of keys3) { conf2[key] = cnf[key]; } }, "setConf"); drawAttributes = /* @__PURE__ */ __name((groupNode, entityTextNode, attributes) => { const heightPadding = conf2.entityPadding / 3; const widthPadding = conf2.entityPadding / 3; const attrFontSize = conf2.fontSize * 0.85; const labelBBox = entityTextNode.node().getBBox(); const attributeNodes = []; let hasKeyType = false; let hasComment = false; let maxTypeWidth = 0; let maxNameWidth = 0; let maxKeyWidth = 0; let maxCommentWidth = 0; let cumulativeHeight = labelBBox.height + heightPadding * 2; let attrNum = 1; attributes.forEach((item) => { if (item.attributeKeyTypeList !== void 0 && item.attributeKeyTypeList.length > 0) { hasKeyType = true; } if (item.attributeComment !== void 0) { hasComment = true; } }); attributes.forEach((item) => { const attrPrefix = `${entityTextNode.node().id}-attr-${attrNum}`; let nodeHeight = 0; const attributeType = parseGenericTypes(item.attributeType); const typeNode = groupNode.append("text").classed("er entityLabel", true).attr("id", `${attrPrefix}-type`).attr("x", 0).attr("y", 0).style("dominant-baseline", "middle").style("text-anchor", "left").style("font-family", getConfig2().fontFamily).style("font-size", attrFontSize + "px").text(attributeType); const nameNode = groupNode.append("text").classed("er entityLabel", true).attr("id", `${attrPrefix}-name`).attr("x", 0).attr("y", 0).style("dominant-baseline", "middle").style("text-anchor", "left").style("font-family", getConfig2().fontFamily).style("font-size", attrFontSize + "px").text(item.attributeName); const attributeNode = {}; attributeNode.tn = typeNode; attributeNode.nn = nameNode; const typeBBox = typeNode.node().getBBox(); const nameBBox = nameNode.node().getBBox(); maxTypeWidth = Math.max(maxTypeWidth, typeBBox.width); maxNameWidth = Math.max(maxNameWidth, nameBBox.width); nodeHeight = Math.max(typeBBox.height, nameBBox.height); if (hasKeyType) { const keyTypeNodeText = item.attributeKeyTypeList !== void 0 ? item.attributeKeyTypeList.join(",") : ""; const keyTypeNode = groupNode.append("text").classed("er entityLabel", true).attr("id", `${attrPrefix}-key`).attr("x", 0).attr("y", 0).style("dominant-baseline", "middle").style("text-anchor", "left").style("font-family", getConfig2().fontFamily).style("font-size", attrFontSize + "px").text(keyTypeNodeText); attributeNode.kn = keyTypeNode; const keyTypeBBox = keyTypeNode.node().getBBox(); maxKeyWidth = Math.max(maxKeyWidth, keyTypeBBox.width); nodeHeight = Math.max(nodeHeight, keyTypeBBox.height); } if (hasComment) { const commentNode = groupNode.append("text").classed("er entityLabel", true).attr("id", `${attrPrefix}-comment`).attr("x", 0).attr("y", 0).style("dominant-baseline", "middle").style("text-anchor", "left").style("font-family", getConfig2().fontFamily).style("font-size", attrFontSize + "px").text(item.attributeComment || ""); attributeNode.cn = commentNode; const commentNodeBBox = commentNode.node().getBBox(); maxCommentWidth = Math.max(maxCommentWidth, commentNodeBBox.width); nodeHeight = Math.max(nodeHeight, commentNodeBBox.height); } attributeNode.height = nodeHeight; attributeNodes.push(attributeNode); cumulativeHeight += nodeHeight + heightPadding * 2; attrNum += 1; }); let widthPaddingFactor = 4; if (hasKeyType) { widthPaddingFactor += 2; } if (hasComment) { widthPaddingFactor += 2; } const maxWidth = maxTypeWidth + maxNameWidth + maxKeyWidth + maxCommentWidth; const bBox = { width: Math.max( conf2.minEntityWidth, Math.max( labelBBox.width + conf2.entityPadding * 2, maxWidth + widthPadding * widthPaddingFactor ) ), height: attributes.length > 0 ? cumulativeHeight : Math.max(conf2.minEntityHeight, labelBBox.height + conf2.entityPadding * 2) }; if (attributes.length > 0) { const spareColumnWidth = Math.max( 0, (bBox.width - maxWidth - widthPadding * widthPaddingFactor) / (widthPaddingFactor / 2) ); entityTextNode.attr( "transform", "translate(" + bBox.width / 2 + "," + (heightPadding + labelBBox.height / 2) + ")" ); let heightOffset = labelBBox.height + heightPadding * 2; let attribStyle = "attributeBoxOdd"; attributeNodes.forEach((attributeNode) => { const alignY = heightOffset + heightPadding + attributeNode.height / 2; attributeNode.tn.attr("transform", "translate(" + widthPadding + "," + alignY + ")"); const typeRect = groupNode.insert("rect", "#" + attributeNode.tn.node().id).classed(`er ${attribStyle}`, true).attr("x", 0).attr("y", heightOffset).attr("width", maxTypeWidth + widthPadding * 2 + spareColumnWidth).attr("height", attributeNode.height + heightPadding * 2); const nameXOffset = parseFloat(typeRect.attr("x")) + parseFloat(typeRect.attr("width")); attributeNode.nn.attr( "transform", "translate(" + (nameXOffset + widthPadding) + "," + alignY + ")" ); const nameRect = groupNode.insert("rect", "#" + attributeNode.nn.node().id).classed(`er ${attribStyle}`, true).attr("x", nameXOffset).attr("y", heightOffset).attr("width", maxNameWidth + widthPadding * 2 + spareColumnWidth).attr("height", attributeNode.height + heightPadding * 2); let keyTypeAndCommentXOffset = parseFloat(nameRect.attr("x")) + parseFloat(nameRect.attr("width")); if (hasKeyType) { attributeNode.kn.attr( "transform", "translate(" + (keyTypeAndCommentXOffset + widthPadding) + "," + alignY + ")" ); const keyTypeRect = groupNode.insert("rect", "#" + attributeNode.kn.node().id).classed(`er ${attribStyle}`, true).attr("x", keyTypeAndCommentXOffset).attr("y", heightOffset).attr("width", maxKeyWidth + widthPadding * 2 + spareColumnWidth).attr("height", attributeNode.height + heightPadding * 2); keyTypeAndCommentXOffset = parseFloat(keyTypeRect.attr("x")) + parseFloat(keyTypeRect.attr("width")); } if (hasComment) { attributeNode.cn.attr( "transform", "translate(" + (keyTypeAndCommentXOffset + widthPadding) + "," + alignY + ")" ); groupNode.insert("rect", "#" + attributeNode.cn.node().id).classed(`er ${attribStyle}`, "true").attr("x", keyTypeAndCommentXOffset).attr("y", heightOffset).attr("width", maxCommentWidth + widthPadding * 2 + spareColumnWidth).attr("height", attributeNode.height + heightPadding * 2); } heightOffset += attributeNode.height + heightPadding * 2; attribStyle = attribStyle === "attributeBoxOdd" ? "attributeBoxEven" : "attributeBoxOdd"; }); } else { bBox.height = Math.max(conf2.minEntityHeight, cumulativeHeight); entityTextNode.attr("transform", "translate(" + bBox.width / 2 + "," + bBox.height / 2 + ")"); } return bBox; }, "drawAttributes"); drawEntities = /* @__PURE__ */ __name(function(svgNode2, entities2, graph) { const keys3 = [...entities2.keys()]; let firstOne; keys3.forEach(function(entityName) { const entityId = generateId2(entityName, "entity"); entityNameIds.set(entityName, entityId); const groupNode = svgNode2.append("g").attr("id", entityId); firstOne = firstOne === void 0 ? entityId : firstOne; const textId = "text-" + entityId; const textNode = groupNode.append("text").classed("er entityLabel", true).attr("id", textId).attr("x", 0).attr("y", 0).style("dominant-baseline", "middle").style("text-anchor", "middle").style("font-family", getConfig2().fontFamily).style("font-size", conf2.fontSize + "px").text(entities2.get(entityName).alias ?? entityName); const { width: entityWidth, height: entityHeight } = drawAttributes( groupNode, textNode, entities2.get(entityName).attributes ); const rectNode = groupNode.insert("rect", "#" + textId).classed("er entityBox", true).attr("x", 0).attr("y", 0).attr("width", entityWidth).attr("height", entityHeight); const rectBBox = rectNode.node().getBBox(); graph.setNode(entityId, { width: rectBBox.width, height: rectBBox.height, shape: "rect", id: entityId }); }); return firstOne; }, "drawEntities"); adjustEntities = /* @__PURE__ */ __name(function(svgNode2, graph) { graph.nodes().forEach(function(v3) { if (v3 !== void 0 && graph.node(v3) !== void 0) { svgNode2.select("#" + v3).attr( "transform", "translate(" + (graph.node(v3).x - graph.node(v3).width / 2) + "," + (graph.node(v3).y - graph.node(v3).height / 2) + " )" ); } }); }, "adjustEntities"); getEdgeName = /* @__PURE__ */ __name(function(rel2) { return (rel2.entityA + rel2.roleA + rel2.entityB).replace(/\s/g, ""); }, "getEdgeName"); addRelationships = /* @__PURE__ */ __name(function(relationships2, g2) { relationships2.forEach(function(r2) { g2.setEdge( entityNameIds.get(r2.entityA), entityNameIds.get(r2.entityB), { relationship: r2 }, getEdgeName(r2) ); }); return relationships2; }, "addRelationships"); relCnt = 0; drawRelationshipFromLayout = /* @__PURE__ */ __name(function(svg, rel2, g2, insert, diagObj) { relCnt++; const edge = g2.edge( entityNameIds.get(rel2.entityA), entityNameIds.get(rel2.entityB), getEdgeName(rel2) ); const lineFunction = line_default().x(function(d2) { return d2.x; }).y(function(d2) { return d2.y; }).curve(basis_default2); const svgPath = svg.insert("path", "#" + insert).classed("er relationshipLine", true).attr("d", lineFunction(edge.points)).style("stroke", conf2.stroke).style("fill", "none"); if (rel2.relSpec.relType === diagObj.db.Identification.NON_IDENTIFYING) { svgPath.attr("stroke-dasharray", "8,8"); } let url = ""; if (conf2.arrowMarkerAbsolute) { url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; url = url.replace(/\(/g, "\\("); url = url.replace(/\)/g, "\\)"); } switch (rel2.relSpec.cardA) { case diagObj.db.Cardinality.ZERO_OR_ONE: svgPath.attr("marker-end", "url(" + url + "#" + erMarkers_default.ERMarkers.ZERO_OR_ONE_END + ")"); break; case diagObj.db.Cardinality.ZERO_OR_MORE: svgPath.attr("marker-end", "url(" + url + "#" + erMarkers_default.ERMarkers.ZERO_OR_MORE_END + ")"); break; case diagObj.db.Cardinality.ONE_OR_MORE: svgPath.attr("marker-end", "url(" + url + "#" + erMarkers_default.ERMarkers.ONE_OR_MORE_END + ")"); break; case diagObj.db.Cardinality.ONLY_ONE: svgPath.attr("marker-end", "url(" + url + "#" + erMarkers_default.ERMarkers.ONLY_ONE_END + ")"); break; case diagObj.db.Cardinality.MD_PARENT: svgPath.attr("marker-end", "url(" + url + "#" + erMarkers_default.ERMarkers.MD_PARENT_END + ")"); break; } switch (rel2.relSpec.cardB) { case diagObj.db.Cardinality.ZERO_OR_ONE: svgPath.attr( "marker-start", "url(" + url + "#" + erMarkers_default.ERMarkers.ZERO_OR_ONE_START + ")" ); break; case diagObj.db.Cardinality.ZERO_OR_MORE: svgPath.attr( "marker-start", "url(" + url + "#" + erMarkers_default.ERMarkers.ZERO_OR_MORE_START + ")" ); break; case diagObj.db.Cardinality.ONE_OR_MORE: svgPath.attr( "marker-start", "url(" + url + "#" + erMarkers_default.ERMarkers.ONE_OR_MORE_START + ")" ); break; case diagObj.db.Cardinality.ONLY_ONE: svgPath.attr("marker-start", "url(" + url + "#" + erMarkers_default.ERMarkers.ONLY_ONE_START + ")"); break; case diagObj.db.Cardinality.MD_PARENT: svgPath.attr("marker-start", "url(" + url + "#" + erMarkers_default.ERMarkers.MD_PARENT_START + ")"); break; } const len = svgPath.node().getTotalLength(); const labelPoint = svgPath.node().getPointAtLength(len * 0.5); const labelId = "rel" + relCnt; const labelText = rel2.roleA.split(/
    /g); const labelNode = svg.append("text").classed("er relationshipLabel", true).attr("id", labelId).attr("x", labelPoint.x).attr("y", labelPoint.y).style("text-anchor", "middle").style("dominant-baseline", "middle").style("font-family", getConfig2().fontFamily).style("font-size", conf2.fontSize + "px"); if (labelText.length == 1) { labelNode.text(rel2.roleA); } else { const firstShift = -(labelText.length - 1) * 0.5; labelText.forEach((txt, i2) => { labelNode.append("tspan").attr("x", labelPoint.x).attr("dy", `${i2 === 0 ? firstShift : 1}em`).text(txt); }); } const labelBBox = labelNode.node().getBBox(); svg.insert("rect", "#" + labelId).classed("er relationshipLabelBox", true).attr("x", labelPoint.x - labelBBox.width / 2).attr("y", labelPoint.y - labelBBox.height / 2).attr("width", labelBBox.width).attr("height", labelBBox.height); }, "drawRelationshipFromLayout"); draw3 = /* @__PURE__ */ __name(function(text3, id28, _version, diagObj) { conf2 = getConfig2().er; log.info("Drawing ER diagram"); const securityLevel = getConfig2().securityLevel; let sandboxElement; if (securityLevel === "sandbox") { sandboxElement = select_default2("#i" + id28); } const root4 = securityLevel === "sandbox" ? select_default2(sandboxElement.nodes()[0].contentDocument.body) : select_default2("body"); const svg = root4.select(`[id='${id28}']`); erMarkers_default.insertMarkers(svg, conf2); let g2; g2 = new Graph({ multigraph: true, directed: true, compound: false }).setGraph({ rankdir: conf2.layoutDirection, marginx: 20, marginy: 20, nodesep: 100, edgesep: 100, ranksep: 100 }).setDefaultEdgeLabel(function() { return {}; }); const firstEntity = drawEntities(svg, diagObj.db.getEntities(), g2); const relationships2 = addRelationships(diagObj.db.getRelationships(), g2); layout(g2); adjustEntities(svg, g2); relationships2.forEach(function(rel2) { drawRelationshipFromLayout(svg, rel2, g2, firstEntity, diagObj); }); const padding2 = conf2.diagramPadding; utils_default2.insertTitle(svg, "entityTitleText", conf2.titleTopMargin, diagObj.db.getDiagramTitle()); const svgBounds = svg.node().getBBox(); const width3 = svgBounds.width + padding2 * 2; const height2 = svgBounds.height + padding2 * 2; configureSvgSize(svg, height2, width3, conf2.useMaxWidth); svg.attr("viewBox", `${svgBounds.x - padding2} ${svgBounds.y - padding2} ${width3} ${height2}`); }, "draw"); MERMAID_ERDIAGRAM_UUID = "28e9f9db-3c8d-5aa5-9faf-44286ae5937c"; __name(generateId2, "generateId"); __name(strWithHyphen, "strWithHyphen"); erRenderer_default = { setConf: setConf2, draw: draw3 }; } }); // src/diagrams/er/styles.js var getStyles4, styles_default4; var init_styles4 = __esm({ "src/diagrams/er/styles.js"() { "use strict"; getStyles4 = /* @__PURE__ */ __name((options3) => ` .entityBox { fill: ${options3.mainBkg}; stroke: ${options3.nodeBorder}; } .attributeBoxOdd { fill: ${options3.attributeBackgroundColorOdd}; stroke: ${options3.nodeBorder}; } .attributeBoxEven { fill: ${options3.attributeBackgroundColorEven}; stroke: ${options3.nodeBorder}; } .relationshipLabelBox { fill: ${options3.tertiaryColor}; opacity: 0.7; background-color: ${options3.tertiaryColor}; rect { opacity: 0.5; } } .relationshipLine { stroke: ${options3.lineColor}; } .entityTitleText { text-anchor: middle; font-size: 18px; fill: ${options3.textColor}; } #MD_PARENT_START { fill: #f5f5f5 !important; stroke: ${options3.lineColor} !important; stroke-width: 1; } #MD_PARENT_END { fill: #f5f5f5 !important; stroke: ${options3.lineColor} !important; stroke-width: 1; } `, "getStyles"); styles_default4 = getStyles4; } }); // src/diagrams/er/erDiagram.ts var erDiagram_exports = {}; __export(erDiagram_exports, { diagram: () => diagram3 }); var diagram3; var init_erDiagram2 = __esm({ "src/diagrams/er/erDiagram.ts"() { "use strict"; init_erDiagram(); init_erDb(); init_erRenderer(); init_styles4(); diagram3 = { parser: erDiagram_default, db: erDb_default, renderer: erRenderer_default, styles: styles_default4 }; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/syntax-tree.js 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"; } 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 && isAstNode(obj.container) && isReference(obj.reference) && 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"; } var AbstractAstReflection; var init_syntax_tree = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/syntax-tree.js"() { "use strict"; __name(isAstNode, "isAstNode"); __name(isReference, "isReference"); __name(isAstNodeDescription, "isAstNodeDescription"); __name(isLinkingError, "isLinkingError"); AbstractAstReflection = class { static { __name(this, "AbstractAstReflection"); } constructor() { this.subtypes = {}; this.allSubtypes = {}; } 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 result = this.computeIsSubtype(subtype, supertype); 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"); __name(isLeafCstNode, "isLeafCstNode"); __name(isRootCstNode, "isRootCstNode"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/utils/stream.js function toString3(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 }), (state5) => { if (state5.index < collection4.length) { return { done: false, value: collection4[state5.index++] }; } else { return DONE_RESULT; } }); } } if (collections.length > 1) { return new StreamImpl(() => ({ collIndex: 0, arrIndex: 0 }), (state5) => { do { if (state5.iterator) { const next3 = state5.iterator.next(); if (!next3.done) { return next3; } state5.iterator = void 0; } if (state5.array) { if (state5.arrIndex < state5.array.length) { return { done: false, value: state5.array[state5.arrIndex++] }; } state5.array = void 0; state5.arrIndex = 0; } if (state5.collIndex < collections.length) { const collection4 = collections[state5.collIndex++]; if (isIterable(collection4)) { state5.iterator = collection4[Symbol.iterator](); } else if (collection4 && typeof collection4.length === "number") { state5.array = collection4; } } } while (state5.iterator || state5.array || state5.collIndex < collections.length); return DONE_RESULT; }); } return EMPTY_STREAM; } var StreamImpl, EMPTY_STREAM, DONE_RESULT, TreeStreamImpl, Reduction; var init_stream = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/utils/stream.js"() { "use strict"; StreamImpl = class _StreamImpl { static { __name(this, "StreamImpl"); } constructor(startFn, nextFn) { this.startFn = startFn; this.nextFn = nextFn; } iterator() { const iterator = { state: this.startFn(), next: /* @__PURE__ */ __name(() => 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 count = 0; let next3 = iterator.next(); while (!next3.done) { count++; next3 = iterator.next(); } return count; } 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) { const iterator = other[Symbol.iterator](); return new _StreamImpl(() => ({ first: this.startFn(), firstDone: false }), (state5) => { let result; if (!state5.firstDone) { do { result = this.nextFn(state5.first); if (!result.done) { return result; } } while (!result.done); state5.firstDone = true; } do { result = 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 += toString3(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, (state5) => { const { done, value: value2 } = this.nextFn(state5); if (done) { return DONE_RESULT; } else { return { done: false, value: callbackfn(value2) }; } }); } filter(predicate) { return new _StreamImpl(this.startFn, (state5) => { let result; do { result = this.nextFn(state5); 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() }), (state5) => { do { if (state5.iterator) { const next3 = state5.iterator.next(); if (next3.done) { state5.iterator = void 0; } else { return next3; } } const { done, value: value2 } = this.nextFn(state5.this); if (!done) { const mapped = callbackfn(value2); if (isIterable(mapped)) { state5.iterator = mapped[Symbol.iterator](); } else { return { done: false, value: mapped }; } } } while (state5.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() }), (state5) => { do { if (state5.iterator) { const next3 = state5.iterator.next(); if (next3.done) { state5.iterator = void 0; } else { return next3; } } const { done, value: value2 } = stream2.nextFn(state5.this); if (!done) { if (isIterable(value2)) { state5.iterator = value2[Symbol.iterator](); } else { return { done: false, value: value2 }; } } } while (state5.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 state5 = this.startFn(); for (let i2 = 0; i2 < skipCount; i2++) { const next3 = this.nextFn(state5); if (next3.done) { return state5; } } return state5; }, this.nextFn); } limit(maxSize) { return new _StreamImpl(() => ({ size: 0, state: this.startFn() }), (state5) => { state5.size++; if (state5.size > maxSize) { return DONE_RESULT; } return this.nextFn(state5.state); }); } distinct(by) { const set6 = /* @__PURE__ */ new Set(); return this.filter((e3) => { const value2 = by ? by(e3) : e3; if (set6.has(value2)) { return false; } else { set6.add(value2); return true; } }); } 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(toString3, "toString"); __name(isIterable, "isIterable"); EMPTY_STREAM = new StreamImpl(() => void 0, () => DONE_RESULT); DONE_RESULT = Object.freeze({ done: true, value: void 0 }); __name(stream, "stream"); TreeStreamImpl = class extends StreamImpl { static { __name(this, "TreeStreamImpl"); } constructor(root4, children2, options3) { super(() => ({ iterators: (options3 === null || options3 === void 0 ? void 0 : options3.includeRoot) ? [[root4][Symbol.iterator]()] : [children2(root4)[Symbol.iterator]()], pruned: false }), (state5) => { if (state5.pruned) { state5.iterators.pop(); state5.pruned = false; } while (state5.iterators.length > 0) { const iterator = state5.iterators[state5.iterators.length - 1]; const next3 = iterator.next(); if (next3.done) { state5.iterators.pop(); } else { state5.iterators.push(children2(next3.value)[Symbol.iterator]()); return next3; } } return DONE_RESULT; }); } iterator() { const iterator = { state: this.startFn(), next: /* @__PURE__ */ __name(() => this.nextFn(iterator.state), "next"), prune: /* @__PURE__ */ __name(() => { iterator.state.pruned = true; }, "prune"), [Symbol.iterator]: () => iterator }; return iterator; } }; (function(Reduction2) { function sum2(stream2) { return stream2.reduce((a2, b2) => a2 + b2, 0); } __name(sum2, "sum"); Reduction2.sum = sum2; function product(stream2) { return stream2.reduce((a2, b2) => a2 * b2, 0); } __name(product, "product"); Reduction2.product = product; function min9(stream2) { return stream2.reduce((a2, b2) => Math.min(a2, b2)); } __name(min9, "min"); Reduction2.min = min9; function max10(stream2) { return stream2.reduce((a2, b2) => Math.max(a2, b2)); } __name(max10, "max"); Reduction2.max = max10; })(Reduction || (Reduction = {})); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/utils/cst-utils.js var cst_utils_exports = {}; __export(cst_utils_exports, { DefaultNameRegexp: () => DefaultNameRegexp, RangeComparison: () => RangeComparison, compareRange: () => compareRange, findCommentNode: () => findCommentNode, findDeclarationNodeAtOffset: () => findDeclarationNodeAtOffset, findLeafNodeAtOffset: () => findLeafNodeAtOffset, findLeafNodeBeforeOffset: () => findLeafNodeBeforeOffset, flattenCst: () => flattenCst, getInteriorNodes: () => getInteriorNodes, getNextNode: () => getNextNode, getPreviousNode: () => getPreviousNode, getStartlineNode: () => getStartlineNode, inRange: () => inRange, isChildNode: () => isChildNode, isCommentNode: () => isCommentNode, streamCst: () => streamCst, toDocumentSegment: () => toDocumentSegment, tokenToRange: () => tokenToRange }); 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, 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 < range3.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 { return RangeComparison.OverlapFront; } } 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 last3 = parent4.content.length - 1; while (index < last3) { 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 last3 = node2; let index; while (node2.container) { const parent4 = node2.container; const selfIndex = index !== null && index !== void 0 ? 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; } last3 = node2; } return last3; } 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, b2) { const aParents = getParentChain(a2); const bParents = getParentChain(b2); 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(); } var RangeComparison, DefaultNameRegexp; var init_cst_utils = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/utils/cst-utils.js"() { "use strict"; init_syntax_tree(); init_stream(); __name(streamCst, "streamCst"); __name(flattenCst, "flattenCst"); __name(isChildNode, "isChildNode"); __name(tokenToRange, "tokenToRange"); __name(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"; })(RangeComparison || (RangeComparison = {})); __name(compareRange, "compareRange"); __name(inRange, "inRange"); DefaultNameRegexp = /^[\w\p{L}]$/u; __name(findDeclarationNodeAtOffset, "findDeclarationNodeAtOffset"); __name(findCommentNode, "findCommentNode"); __name(isCommentNode, "isCommentNode"); __name(findLeafNodeAtOffset, "findLeafNodeAtOffset"); __name(findLeafNodeBeforeOffset, "findLeafNodeBeforeOffset"); __name(binarySearch, "binarySearch"); __name(getPreviousNode, "getPreviousNode"); __name(getNextNode, "getNextNode"); __name(getStartlineNode, "getStartlineNode"); __name(getInteriorNodes, "getInteriorNodes"); __name(getCommonParent, "getCommonParent"); __name(getParentChain, "getParentChain"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/utils/errors.js function assertUnreachable(_2) { throw new Error("Error! The input value was not handled."); } var ErrorWithLocation; var init_errors2 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/utils/errors.js"() { "use strict"; ErrorWithLocation = class extends Error { static { __name(this, "ErrorWithLocation"); } constructor(node2, message) { super(node2 ? `${message} at ${node2.range.start.line}:${node2.range.start.character}` : message); } }; __name(assertUnreachable, "assertUnreachable"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/languages/generated/ast.js var ast_exports = {}; __export(ast_exports, { AbstractElement: () => AbstractElement, AbstractRule: () => AbstractRule, AbstractType: () => AbstractType, Action: () => Action, Alternatives: () => Alternatives, ArrayLiteral: () => ArrayLiteral, ArrayType: () => ArrayType, Assignment: () => Assignment, BooleanLiteral: () => BooleanLiteral, CharacterRange: () => CharacterRange, Condition: () => Condition, Conjunction: () => Conjunction, CrossReference: () => CrossReference, Disjunction: () => Disjunction, EndOfFile: () => EndOfFile, Grammar: () => Grammar, GrammarImport: () => GrammarImport, Group: () => Group, InferredType: () => InferredType, Interface: () => Interface, Keyword: () => Keyword2, LangiumGrammarAstReflection: () => LangiumGrammarAstReflection, LangiumGrammarTerminals: () => LangiumGrammarTerminals, NamedArgument: () => NamedArgument, NegatedToken: () => NegatedToken, Negation: () => Negation, NumberLiteral: () => NumberLiteral, Parameter: () => Parameter, ParameterReference: () => ParameterReference, ParserRule: () => ParserRule, ReferenceType: () => ReferenceType, RegexToken: () => RegexToken, ReturnType: () => ReturnType, RuleCall: () => RuleCall, SimpleType: () => SimpleType, StringLiteral: () => StringLiteral, TerminalAlternatives: () => TerminalAlternatives, TerminalGroup: () => TerminalGroup, TerminalRule: () => TerminalRule, TerminalRuleCall: () => TerminalRuleCall, Type: () => Type2, TypeAttribute: () => TypeAttribute, TypeDefinition: () => TypeDefinition, UnionType: () => UnionType, UnorderedGroup: () => UnorderedGroup, UntilToken: () => UntilToken, ValueLiteral: () => ValueLiteral, Wildcard: () => Wildcard, isAbstractElement: () => isAbstractElement, isAbstractRule: () => isAbstractRule, isAbstractType: () => isAbstractType, isAction: () => isAction, isAlternatives: () => isAlternatives, isArrayLiteral: () => isArrayLiteral, isArrayType: () => isArrayType, isAssignment: () => isAssignment, isBooleanLiteral: () => isBooleanLiteral, isCharacterRange: () => isCharacterRange, isCondition: () => isCondition, isConjunction: () => isConjunction, isCrossReference: () => isCrossReference, isDisjunction: () => isDisjunction, isEndOfFile: () => isEndOfFile, isFeatureName: () => isFeatureName, isGrammar: () => isGrammar, isGrammarImport: () => isGrammarImport, isGroup: () => isGroup, isInferredType: () => isInferredType, isInterface: () => isInterface, isKeyword: () => isKeyword, isNamedArgument: () => isNamedArgument, isNegatedToken: () => isNegatedToken, isNegation: () => isNegation, isNumberLiteral: () => isNumberLiteral, isParameter: () => isParameter, isParameterReference: () => isParameterReference, isParserRule: () => isParserRule, isPrimitiveType: () => isPrimitiveType, isReferenceType: () => isReferenceType, isRegexToken: () => isRegexToken, isReturnType: () => isReturnType, isRuleCall: () => isRuleCall, isSimpleType: () => isSimpleType, isStringLiteral: () => isStringLiteral, isTerminalAlternatives: () => isTerminalAlternatives, isTerminalGroup: () => isTerminalGroup, isTerminalRule: () => isTerminalRule, isTerminalRuleCall: () => isTerminalRuleCall, isType: () => isType, isTypeAttribute: () => isTypeAttribute, isTypeDefinition: () => isTypeDefinition, isUnionType: () => isUnionType, isUnorderedGroup: () => isUnorderedGroup, isUntilToken: () => isUntilToken, isValueLiteral: () => isValueLiteral, isWildcard: () => isWildcard, reflection: () => reflection }); function isAbstractRule(item) { return reflection.isInstance(item, AbstractRule); } function isAbstractType(item) { return reflection.isInstance(item, AbstractType); } function isCondition(item) { return reflection.isInstance(item, Condition); } function isFeatureName(item) { return isPrimitiveType(item) || item === "current" || item === "entry" || item === "extends" || item === "false" || item === "fragment" || item === "grammar" || item === "hidden" || item === "import" || item === "interface" || item === "returns" || item === "terminal" || item === "true" || item === "type" || item === "infer" || item === "infers" || item === "with" || typeof item === "string" && /\^?[_a-zA-Z][\w_]*/.test(item); } function isPrimitiveType(item) { return item === "string" || item === "number" || item === "boolean" || item === "Date" || item === "bigint"; } function isTypeDefinition(item) { return reflection.isInstance(item, TypeDefinition); } function isValueLiteral(item) { return reflection.isInstance(item, ValueLiteral); } function isAbstractElement(item) { return reflection.isInstance(item, AbstractElement); } function isArrayLiteral(item) { return reflection.isInstance(item, ArrayLiteral); } function isArrayType(item) { return reflection.isInstance(item, ArrayType); } function isBooleanLiteral(item) { return reflection.isInstance(item, BooleanLiteral); } function isConjunction(item) { return reflection.isInstance(item, Conjunction); } function isDisjunction(item) { return reflection.isInstance(item, Disjunction); } function isGrammar(item) { return reflection.isInstance(item, Grammar); } function isGrammarImport(item) { return reflection.isInstance(item, GrammarImport); } function isInferredType(item) { return reflection.isInstance(item, InferredType); } function isInterface(item) { return reflection.isInstance(item, Interface); } function isNamedArgument(item) { return reflection.isInstance(item, NamedArgument); } function isNegation(item) { return reflection.isInstance(item, Negation); } function isNumberLiteral(item) { return reflection.isInstance(item, NumberLiteral); } function isParameter(item) { return reflection.isInstance(item, Parameter); } function isParameterReference(item) { return reflection.isInstance(item, ParameterReference); } function isParserRule(item) { return reflection.isInstance(item, ParserRule); } function isReferenceType(item) { return reflection.isInstance(item, ReferenceType); } function isReturnType(item) { return reflection.isInstance(item, ReturnType); } function isSimpleType(item) { return reflection.isInstance(item, SimpleType); } function isStringLiteral(item) { return reflection.isInstance(item, StringLiteral); } function isTerminalRule(item) { return reflection.isInstance(item, TerminalRule); } function isType(item) { return reflection.isInstance(item, Type2); } function isTypeAttribute(item) { return reflection.isInstance(item, TypeAttribute); } function isUnionType(item) { return reflection.isInstance(item, UnionType); } function isAction(item) { return reflection.isInstance(item, Action); } function isAlternatives(item) { return reflection.isInstance(item, Alternatives); } function isAssignment(item) { return reflection.isInstance(item, Assignment); } function isCharacterRange(item) { return reflection.isInstance(item, CharacterRange); } function isCrossReference(item) { return reflection.isInstance(item, CrossReference); } function isEndOfFile(item) { return reflection.isInstance(item, EndOfFile); } function isGroup(item) { return reflection.isInstance(item, Group); } function isKeyword(item) { return reflection.isInstance(item, Keyword2); } function isNegatedToken(item) { return reflection.isInstance(item, NegatedToken); } function isRegexToken(item) { return reflection.isInstance(item, RegexToken); } function isRuleCall(item) { return reflection.isInstance(item, RuleCall); } function isTerminalAlternatives(item) { return reflection.isInstance(item, TerminalAlternatives); } function isTerminalGroup(item) { return reflection.isInstance(item, TerminalGroup); } function isTerminalRuleCall(item) { return reflection.isInstance(item, TerminalRuleCall); } function isUnorderedGroup(item) { return reflection.isInstance(item, UnorderedGroup); } function isUntilToken(item) { return reflection.isInstance(item, UntilToken); } function isWildcard(item) { return reflection.isInstance(item, Wildcard); } var LangiumGrammarTerminals, AbstractRule, AbstractType, Condition, TypeDefinition, ValueLiteral, AbstractElement, ArrayLiteral, ArrayType, BooleanLiteral, Conjunction, Disjunction, Grammar, GrammarImport, InferredType, Interface, NamedArgument, Negation, NumberLiteral, Parameter, ParameterReference, ParserRule, ReferenceType, ReturnType, SimpleType, StringLiteral, TerminalRule, Type2, TypeAttribute, UnionType, Action, Alternatives, Assignment, CharacterRange, CrossReference, EndOfFile, Group, Keyword2, NegatedToken, RegexToken, RuleCall, TerminalAlternatives, TerminalGroup, TerminalRuleCall, UnorderedGroup, UntilToken, Wildcard, LangiumGrammarAstReflection, reflection; var init_ast = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/languages/generated/ast.js"() { "use strict"; init_syntax_tree(); 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]*/ }; AbstractRule = "AbstractRule"; __name(isAbstractRule, "isAbstractRule"); AbstractType = "AbstractType"; __name(isAbstractType, "isAbstractType"); Condition = "Condition"; __name(isCondition, "isCondition"); __name(isFeatureName, "isFeatureName"); __name(isPrimitiveType, "isPrimitiveType"); TypeDefinition = "TypeDefinition"; __name(isTypeDefinition, "isTypeDefinition"); ValueLiteral = "ValueLiteral"; __name(isValueLiteral, "isValueLiteral"); AbstractElement = "AbstractElement"; __name(isAbstractElement, "isAbstractElement"); ArrayLiteral = "ArrayLiteral"; __name(isArrayLiteral, "isArrayLiteral"); ArrayType = "ArrayType"; __name(isArrayType, "isArrayType"); BooleanLiteral = "BooleanLiteral"; __name(isBooleanLiteral, "isBooleanLiteral"); Conjunction = "Conjunction"; __name(isConjunction, "isConjunction"); Disjunction = "Disjunction"; __name(isDisjunction, "isDisjunction"); Grammar = "Grammar"; __name(isGrammar, "isGrammar"); GrammarImport = "GrammarImport"; __name(isGrammarImport, "isGrammarImport"); InferredType = "InferredType"; __name(isInferredType, "isInferredType"); Interface = "Interface"; __name(isInterface, "isInterface"); NamedArgument = "NamedArgument"; __name(isNamedArgument, "isNamedArgument"); Negation = "Negation"; __name(isNegation, "isNegation"); NumberLiteral = "NumberLiteral"; __name(isNumberLiteral, "isNumberLiteral"); Parameter = "Parameter"; __name(isParameter, "isParameter"); ParameterReference = "ParameterReference"; __name(isParameterReference, "isParameterReference"); ParserRule = "ParserRule"; __name(isParserRule, "isParserRule"); ReferenceType = "ReferenceType"; __name(isReferenceType, "isReferenceType"); ReturnType = "ReturnType"; __name(isReturnType, "isReturnType"); SimpleType = "SimpleType"; __name(isSimpleType, "isSimpleType"); StringLiteral = "StringLiteral"; __name(isStringLiteral, "isStringLiteral"); TerminalRule = "TerminalRule"; __name(isTerminalRule, "isTerminalRule"); Type2 = "Type"; __name(isType, "isType"); TypeAttribute = "TypeAttribute"; __name(isTypeAttribute, "isTypeAttribute"); UnionType = "UnionType"; __name(isUnionType, "isUnionType"); Action = "Action"; __name(isAction, "isAction"); Alternatives = "Alternatives"; __name(isAlternatives, "isAlternatives"); Assignment = "Assignment"; __name(isAssignment, "isAssignment"); CharacterRange = "CharacterRange"; __name(isCharacterRange, "isCharacterRange"); CrossReference = "CrossReference"; __name(isCrossReference, "isCrossReference"); EndOfFile = "EndOfFile"; __name(isEndOfFile, "isEndOfFile"); Group = "Group"; __name(isGroup, "isGroup"); Keyword2 = "Keyword"; __name(isKeyword, "isKeyword"); NegatedToken = "NegatedToken"; __name(isNegatedToken, "isNegatedToken"); RegexToken = "RegexToken"; __name(isRegexToken, "isRegexToken"); RuleCall = "RuleCall"; __name(isRuleCall, "isRuleCall"); TerminalAlternatives = "TerminalAlternatives"; __name(isTerminalAlternatives, "isTerminalAlternatives"); TerminalGroup = "TerminalGroup"; __name(isTerminalGroup, "isTerminalGroup"); TerminalRuleCall = "TerminalRuleCall"; __name(isTerminalRuleCall, "isTerminalRuleCall"); UnorderedGroup = "UnorderedGroup"; __name(isUnorderedGroup, "isUnorderedGroup"); UntilToken = "UntilToken"; __name(isUntilToken, "isUntilToken"); Wildcard = "Wildcard"; __name(isWildcard, "isWildcard"); LangiumGrammarAstReflection = class extends AbstractAstReflection { static { __name(this, "LangiumGrammarAstReflection"); } getAllTypes() { return ["AbstractElement", "AbstractRule", "AbstractType", "Action", "Alternatives", "ArrayLiteral", "ArrayType", "Assignment", "BooleanLiteral", "CharacterRange", "Condition", "Conjunction", "CrossReference", "Disjunction", "EndOfFile", "Grammar", "GrammarImport", "Group", "InferredType", "Interface", "Keyword", "NamedArgument", "NegatedToken", "Negation", "NumberLiteral", "Parameter", "ParameterReference", "ParserRule", "ReferenceType", "RegexToken", "ReturnType", "RuleCall", "SimpleType", "StringLiteral", "TerminalAlternatives", "TerminalGroup", "TerminalRule", "TerminalRuleCall", "Type", "TypeAttribute", "TypeDefinition", "UnionType", "UnorderedGroup", "UntilToken", "ValueLiteral", "Wildcard"]; } computeIsSubtype(subtype, supertype) { switch (subtype) { case Action: case Alternatives: case Assignment: case CharacterRange: case CrossReference: case EndOfFile: case Group: case Keyword2: case NegatedToken: case RegexToken: case RuleCall: case TerminalAlternatives: case TerminalGroup: case TerminalRuleCall: case UnorderedGroup: case UntilToken: case Wildcard: { return this.isSubtype(AbstractElement, supertype); } case ArrayLiteral: case NumberLiteral: case StringLiteral: { return this.isSubtype(ValueLiteral, supertype); } case ArrayType: case ReferenceType: case SimpleType: case UnionType: { return this.isSubtype(TypeDefinition, supertype); } case BooleanLiteral: { return this.isSubtype(Condition, supertype) || this.isSubtype(ValueLiteral, supertype); } case Conjunction: case Disjunction: case Negation: case ParameterReference: { return this.isSubtype(Condition, supertype); } case InferredType: case Interface: case Type2: { return this.isSubtype(AbstractType, supertype); } case ParserRule: { return this.isSubtype(AbstractRule, supertype) || this.isSubtype(AbstractType, supertype); } case TerminalRule: { return this.isSubtype(AbstractRule, supertype); } default: { return false; } } } getReferenceType(refInfo) { const referenceId = `${refInfo.container.$type}:${refInfo.property}`; switch (referenceId) { case "Action:type": case "CrossReference:type": case "Interface:superTypes": case "ParserRule:returnType": case "SimpleType:typeRef": { return AbstractType; } case "Grammar:hiddenTokens": case "ParserRule:hiddenTokens": case "RuleCall:rule": { return AbstractRule; } case "Grammar:usedGrammars": { return Grammar; } case "NamedArgument:parameter": case "ParameterReference:parameter": { return Parameter; } case "TerminalRuleCall:rule": { return TerminalRule; } default: { throw new Error(`${referenceId} is not a valid reference id.`); } } } getTypeMetaData(type3) { switch (type3) { case "AbstractElement": { return { name: "AbstractElement", properties: [ { name: "cardinality" }, { name: "lookahead" } ] }; } case "ArrayLiteral": { return { name: "ArrayLiteral", properties: [ { name: "elements", defaultValue: [] } ] }; } case "ArrayType": { return { name: "ArrayType", properties: [ { name: "elementType" } ] }; } case "BooleanLiteral": { return { name: "BooleanLiteral", properties: [ { name: "true", defaultValue: false } ] }; } case "Conjunction": { return { name: "Conjunction", properties: [ { name: "left" }, { name: "right" } ] }; } case "Disjunction": { return { name: "Disjunction", properties: [ { name: "left" }, { name: "right" } ] }; } case "Grammar": { return { name: "Grammar", properties: [ { name: "definesHiddenTokens", defaultValue: false }, { name: "hiddenTokens", defaultValue: [] }, { name: "imports", defaultValue: [] }, { name: "interfaces", defaultValue: [] }, { name: "isDeclared", defaultValue: false }, { name: "name" }, { name: "rules", defaultValue: [] }, { name: "types", defaultValue: [] }, { name: "usedGrammars", defaultValue: [] } ] }; } case "GrammarImport": { return { name: "GrammarImport", properties: [ { name: "path" } ] }; } case "InferredType": { return { name: "InferredType", properties: [ { name: "name" } ] }; } case "Interface": { return { name: "Interface", properties: [ { name: "attributes", defaultValue: [] }, { name: "name" }, { name: "superTypes", defaultValue: [] } ] }; } case "NamedArgument": { return { name: "NamedArgument", properties: [ { name: "calledByName", defaultValue: false }, { name: "parameter" }, { name: "value" } ] }; } case "Negation": { return { name: "Negation", properties: [ { name: "value" } ] }; } case "NumberLiteral": { return { name: "NumberLiteral", properties: [ { name: "value" } ] }; } case "Parameter": { return { name: "Parameter", properties: [ { name: "name" } ] }; } case "ParameterReference": { return { name: "ParameterReference", properties: [ { name: "parameter" } ] }; } case "ParserRule": { return { name: "ParserRule", properties: [ { name: "dataType" }, { name: "definesHiddenTokens", defaultValue: false }, { name: "definition" }, { name: "entry", defaultValue: false }, { name: "fragment", defaultValue: false }, { name: "hiddenTokens", defaultValue: [] }, { name: "inferredType" }, { name: "name" }, { name: "parameters", defaultValue: [] }, { name: "returnType" }, { name: "wildcard", defaultValue: false } ] }; } case "ReferenceType": { return { name: "ReferenceType", properties: [ { name: "referenceType" } ] }; } case "ReturnType": { return { name: "ReturnType", properties: [ { name: "name" } ] }; } case "SimpleType": { return { name: "SimpleType", properties: [ { name: "primitiveType" }, { name: "stringType" }, { name: "typeRef" } ] }; } case "StringLiteral": { return { name: "StringLiteral", properties: [ { name: "value" } ] }; } case "TerminalRule": { return { name: "TerminalRule", properties: [ { name: "definition" }, { name: "fragment", defaultValue: false }, { name: "hidden", defaultValue: false }, { name: "name" }, { name: "type" } ] }; } case "Type": { return { name: "Type", properties: [ { name: "name" }, { name: "type" } ] }; } case "TypeAttribute": { return { name: "TypeAttribute", properties: [ { name: "defaultValue" }, { name: "isOptional", defaultValue: false }, { name: "name" }, { name: "type" } ] }; } case "UnionType": { return { name: "UnionType", properties: [ { name: "types", defaultValue: [] } ] }; } case "Action": { return { name: "Action", properties: [ { name: "cardinality" }, { name: "feature" }, { name: "inferredType" }, { name: "lookahead" }, { name: "operator" }, { name: "type" } ] }; } case "Alternatives": { return { name: "Alternatives", properties: [ { name: "cardinality" }, { name: "elements", defaultValue: [] }, { name: "lookahead" } ] }; } case "Assignment": { return { name: "Assignment", properties: [ { name: "cardinality" }, { name: "feature" }, { name: "lookahead" }, { name: "operator" }, { name: "terminal" } ] }; } case "CharacterRange": { return { name: "CharacterRange", properties: [ { name: "cardinality" }, { name: "left" }, { name: "lookahead" }, { name: "right" } ] }; } case "CrossReference": { return { name: "CrossReference", properties: [ { name: "cardinality" }, { name: "deprecatedSyntax", defaultValue: false }, { name: "lookahead" }, { name: "terminal" }, { name: "type" } ] }; } case "EndOfFile": { return { name: "EndOfFile", properties: [ { name: "cardinality" }, { name: "lookahead" } ] }; } case "Group": { return { name: "Group", properties: [ { name: "cardinality" }, { name: "elements", defaultValue: [] }, { name: "guardCondition" }, { name: "lookahead" } ] }; } case "Keyword": { return { name: "Keyword", properties: [ { name: "cardinality" }, { name: "lookahead" }, { name: "value" } ] }; } case "NegatedToken": { return { name: "NegatedToken", properties: [ { name: "cardinality" }, { name: "lookahead" }, { name: "terminal" } ] }; } case "RegexToken": { return { name: "RegexToken", properties: [ { name: "cardinality" }, { name: "lookahead" }, { name: "regex" } ] }; } case "RuleCall": { return { name: "RuleCall", properties: [ { name: "arguments", defaultValue: [] }, { name: "cardinality" }, { name: "lookahead" }, { name: "rule" } ] }; } case "TerminalAlternatives": { return { name: "TerminalAlternatives", properties: [ { name: "cardinality" }, { name: "elements", defaultValue: [] }, { name: "lookahead" } ] }; } case "TerminalGroup": { return { name: "TerminalGroup", properties: [ { name: "cardinality" }, { name: "elements", defaultValue: [] }, { name: "lookahead" } ] }; } case "TerminalRuleCall": { return { name: "TerminalRuleCall", properties: [ { name: "cardinality" }, { name: "lookahead" }, { name: "rule" } ] }; } case "UnorderedGroup": { return { name: "UnorderedGroup", properties: [ { name: "cardinality" }, { name: "elements", defaultValue: [] }, { name: "lookahead" } ] }; } case "UntilToken": { return { name: "UntilToken", properties: [ { name: "cardinality" }, { name: "lookahead" }, { name: "terminal" } ] }; } case "Wildcard": { return { name: "Wildcard", properties: [ { name: "cardinality" }, { name: "lookahead" } ] }; } default: { return { name: type3, properties: [] }; } } } }; reflection = new LangiumGrammarAstReflection(); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/utils/ast-utils.js var ast_utils_exports = {}; __export(ast_utils_exports, { assignMandatoryProperties: () => assignMandatoryProperties, copyAstNode: () => copyAstNode, findLocalReferences: () => findLocalReferences, findRootNode: () => findRootNode, getContainerOfType: () => getContainerOfType, getDocument: () => getDocument, hasContainerOfType: () => hasContainerOfType, linkContentToContainer: () => linkContentToContainer, streamAllContents: () => streamAllContents, streamAst: () => streamAst, streamContents: () => streamContents, streamReferences: () => streamReferences }); function linkContentToContainer(node2) { 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; } }); } else if (isAstNode(value2)) { value2.$container = node2; value2.$containerProperty = name; } } } } 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 streamContents(node2, options3) { if (!node2) { throw new Error("Node must be an AstNode."); } const range3 = options3 === null || options3 === void 0 ? void 0 : options3.range; return new StreamImpl(() => ({ keys: Object.keys(node2), keyIndex: 0, arrayIndex: 0 }), (state5) => { while (state5.keyIndex < state5.keys.length) { const property2 = state5.keys[state5.keyIndex]; if (!property2.startsWith("$")) { const value2 = node2[property2]; if (isAstNode(value2)) { state5.keyIndex++; if (isAstNodeInRange(value2, range3)) { return { done: false, value: value2 }; } } else if (Array.isArray(value2)) { while (state5.arrayIndex < value2.length) { const index = state5.arrayIndex++; const element3 = value2[index]; if (isAstNode(element3) && isAstNodeInRange(element3, range3)) { return { done: false, value: element3 }; } } state5.arrayIndex = 0; } } state5.keyIndex++; } return DONE_RESULT; }); } function streamAllContents(root4, options3) { if (!root4) { throw new Error("Root node must be an AstNode."); } return new TreeStreamImpl(root4, (node2) => streamContents(node2, options3)); } function streamAst(root4, options3) { if (!root4) { throw new Error("Root node must be an AstNode."); } else if ((options3 === null || options3 === void 0 ? void 0 : options3.range) && !isAstNodeInRange(root4, options3.range)) { return new TreeStreamImpl(root4, () => []); } return new TreeStreamImpl(root4, (node2) => streamContents(node2, options3), { includeRoot: true }); } function isAstNodeInRange(astNode, range3) { var _a; if (!range3) { return true; } const nodeRange = (_a = astNode.$cstNode) === null || _a === void 0 ? void 0 : _a.range; if (!nodeRange) { return false; } return inRange(nodeRange, range3); } function streamReferences(node2) { return new StreamImpl(() => ({ keys: Object.keys(node2), keyIndex: 0, arrayIndex: 0 }), (state5) => { while (state5.keyIndex < state5.keys.length) { const property2 = state5.keys[state5.keyIndex]; if (!property2.startsWith("$")) { const value2 = node2[property2]; if (isReference(value2)) { state5.keyIndex++; return { done: false, value: { reference: value2, container: node2, property: property2 } }; } else if (Array.isArray(value2)) { while (state5.arrayIndex < value2.length) { const index = state5.arrayIndex++; const element3 = value2[index]; if (isReference(element3)) { return { done: false, value: { reference: element3, container: node2, property: property2, index } }; } } state5.arrayIndex = 0; } } state5.keyIndex++; } return DONE_RESULT; }); } function findLocalReferences(targetNode, lookup2 = getDocument(targetNode).parseResult.value) { const refs = []; streamAst(lookup2).forEach((node2) => { streamReferences(node2).forEach((refInfo) => { if (refInfo.reference.ref === targetNode) { refs.push(refInfo.reference); } }); }); return stream(refs); } function assignMandatoryProperties(reflection3, node2) { const typeMetaData = reflection3.getTypeMetaData(node2.$type); const genericNode = node2; for (const property2 of typeMetaData.properties) { if (property2.defaultValue !== void 0 && genericNode[property2.name] === void 0) { genericNode[property2.name] = copyDefaultValue(property2.defaultValue); } } } function copyDefaultValue(propertyType) { if (Array.isArray(propertyType)) { return [...propertyType.map(copyDefaultValue)]; } else { return propertyType; } } function copyAstNode(node2, buildReference) { const copy5 = { $type: node2.$type }; for (const [name, value2] of Object.entries(node2)) { if (!name.startsWith("$")) { if (isAstNode(value2)) { copy5[name] = copyAstNode(value2, buildReference); } else if (isReference(value2)) { copy5[name] = buildReference(copy5, name, value2.$refNode, value2.$refText); } else if (Array.isArray(value2)) { const copiedArray = []; for (const element3 of value2) { if (isAstNode(element3)) { copiedArray.push(copyAstNode(element3, buildReference)); } else if (isReference(element3)) { copiedArray.push(buildReference(copy5, name, element3.$refNode, element3.$refText)); } else { copiedArray.push(element3); } } copy5[name] = copiedArray; } else { copy5[name] = value2; } } } linkContentToContainer(copy5); return copy5; } var init_ast_utils = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/utils/ast-utils.js"() { "use strict"; init_syntax_tree(); init_stream(); init_cst_utils(); __name(linkContentToContainer, "linkContentToContainer"); __name(getContainerOfType, "getContainerOfType"); __name(hasContainerOfType, "hasContainerOfType"); __name(getDocument, "getDocument"); __name(findRootNode, "findRootNode"); __name(streamContents, "streamContents"); __name(streamAllContents, "streamAllContents"); __name(streamAst, "streamAst"); __name(isAstNodeInRange, "isAstNodeInRange"); __name(streamReferences, "streamReferences"); __name(findLocalReferences, "findLocalReferences"); __name(assignMandatoryProperties, "assignMandatoryProperties"); __name(copyDefaultValue, "copyDefaultValue"); __name(copyAstNode, "copyAstNode"); } }); // ../../node_modules/.pnpm/@[email protected]/node_modules/@chevrotain/regexp-to-ast/lib/src/utils.js function cc(char2) { return char2.charCodeAt(0); } function insertToSet(item, set6) { if (Array.isArray(item)) { item.forEach(function(subItem) { set6.push(subItem); }); } else { set6.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"; } var init_utils3 = __esm({ "../../node_modules/.pnpm/@[email protected]/node_modules/@chevrotain/regexp-to-ast/lib/src/utils.js"() { "use strict"; __name(cc, "cc"); __name(insertToSet, "insertToSet"); __name(addFlag, "addFlag"); __name(ASSERT_EXISTS, "ASSERT_EXISTS"); __name(ASSERT_NEVER_REACH_HERE, "ASSERT_NEVER_REACH_HERE"); __name(isCharacter, "isCharacter"); } }); // ../../node_modules/.pnpm/@[email protected]/node_modules/@chevrotain/regexp-to-ast/lib/src/character-classes.js var digitsCharCodes, wordCharCodes, whitespaceCodes; var init_character_classes = __esm({ "../../node_modules/.pnpm/@[email protected]/node_modules/@chevrotain/regexp-to-ast/lib/src/character-classes.js"() { "use strict"; init_utils3(); 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") ]; } }); // ../../node_modules/.pnpm/@[email protected]/node_modules/@chevrotain/regexp-to-ast/lib/src/regexp-parser.js var hexDigitPattern, decimalPattern, decimalPatternNoZero, RegExpParser; var init_regexp_parser = __esm({ "../../node_modules/.pnpm/@[email protected]/node_modules/@chevrotain/regexp-to-ast/lib/src/regexp-parser.js"() { "use strict"; init_utils3(); init_character_classes(); hexDigitPattern = /[0-9a-fA-F]/; decimalPattern = /[0-9]/; decimalPatternNoZero = /[1-9]/; RegExpParser = class { static { __name(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) }; 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"); case "(": this.consumeChar("?"); let type3; switch (this.popChar()) { case "=": type3 = "Lookahead"; break; case "!": type3 = "NegativeLookahead"; 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 set6; let complement = false; switch (this.popChar()) { case "d": set6 = digitsCharCodes; break; case "D": set6 = digitsCharCodes; complement = true; break; case "s": set6 = whitespaceCodes; break; case "S": set6 = whitespaceCodes; complement = true; break; case "w": set6 = wordCharCodes; break; case "W": set6 = wordCharCodes; complement = true; break; } if (ASSERT_EXISTS(set6)) { return { type: "Set", value: set6, 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()) { case "\n": case "\r": case "\u2028": case "\u2029": case "\\": case "]": throw Error("TBD"); default: const nextChar = this.popChar(); return { type: "Character", value: cc(nextChar) }; } } characterClass() { const set6 = []; 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"); } set6.push({ from: from2.value, to: to.value }); } else { insertToSet(from2.value, set6); set6.push(cc("-")); insertToSet(to.value, set6); } } else { insertToSet(from2.value, set6); } } this.consumeChar("]"); return { type: "Set", complement, value: set6 }; } classAtom() { switch (this.peekChar()) { case "]": case "\n": case "\r": case "\u2028": case "\u2029": throw Error("TBD"); case "\\": return this.classEscape(); default: return this.classPatternCharacterAtom(); } } classEscape() { this.consumeChar("\\"); switch (this.peekChar()) { 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) { case "\n": case "\r": case "\u2028": case "\u2029": case "^": case "$": case "\\": case ".": case "*": case "+": case "?": case "(": case ")": case "[": 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 "\\": case "[": case "(": return true; default: return false; } } isAssertion() { switch (this.peekChar(0)) { case "^": case "$": return true; case "\\": switch (this.peekChar(1)) { case "b": case "B": return true; default: return false; } case "(": return this.peekChar(1) === "?" && (this.peekChar(2) === "=" || this.peekChar(2) === "!"); 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 }; } }; } }); // ../../node_modules/.pnpm/@[email protected]/node_modules/@chevrotain/regexp-to-ast/lib/src/base-regexp-visitor.js var BaseRegExpVisitor; var init_base_regexp_visitor = __esm({ "../../node_modules/.pnpm/@[email protected]/node_modules/@chevrotain/regexp-to-ast/lib/src/base-regexp-visitor.js"() { "use strict"; BaseRegExpVisitor = class { static { __name(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 "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) { } // atoms visitCharacter(node2) { } visitSet(node2) { } visitGroup(node2) { } visitGroupBackReference(node2) { } visitQuantifier(node2) { } }; } }); // ../../node_modules/.pnpm/@[email protected]/node_modules/@chevrotain/regexp-to-ast/lib/src/api.js var init_api = __esm({ "../../node_modules/.pnpm/@[email protected]/node_modules/@chevrotain/regexp-to-ast/lib/src/api.js"() { "use strict"; init_regexp_parser(); init_base_regexp_visitor(); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/utils/regexp-utils.js var regexp_utils_exports = {}; __export(regexp_utils_exports, { NEWLINE_REGEXP: () => NEWLINE_REGEXP, escapeRegExp: () => escapeRegExp, getCaseInsensitivePattern: () => getCaseInsensitivePattern, getTerminalParts: () => getTerminalParts, isMultilineComment: () => isMultilineComment, isWhitespace: () => isWhitespace2, partialMatches: () => partialMatches, partialRegExp: () => partialRegExp }); 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 (_a) { 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 (_a) { return false; } } function isWhitespace2(value2) { const regexp = typeof value2 === "string" ? new RegExp(value2) : value2; return regexp.test(" "); } function escapeRegExp(value2) { return value2.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); } function getCaseInsensitivePattern(keyword) { return Array.prototype.map.call(keyword, (letter) => /\w/.test(letter) ? `[${letter.toLowerCase()}${letter.toUpperCase()}]` : escapeRegExp(letter)).join(""); } function partialMatches(regex2, input) { const partial = partialRegExp(regex2); const match2 = input.match(partial); return !!match2 && match2[0].length > 0; } function partialRegExp(regex2) { if (typeof regex2 === "string") { regex2 = new RegExp(regex2); } const re2 = 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"); function appendOptional(nbChars) { result += "(?:" + source.substr(i2, nbChars) + "|$)"; i2 += nbChars; } __name(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 (re2.unicode) { if (source[i2 + 2] === "{") { appendOptional(source.indexOf("}", i2) - i2 + 1); } else { appendOptional(6); } } else { appendOptional(2); } break; case "p": case "P": if (re2.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, "process"); return new RegExp(process2(), regex2.flags); } var NEWLINE_REGEXP, regexpParser, TerminalRegExpVisitor, visitor; var init_regexp_utils = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/utils/regexp-utils.js"() { "use strict"; init_api(); NEWLINE_REGEXP = /\r?\n/gm; regexpParser = new RegExpParser(); TerminalRegExpVisitor = class extends BaseRegExpVisitor { static { __name(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 set6 = this.regex.substring(node2.loc.begin, node2.loc.end); const regex2 = new RegExp(set6); this.multiline = Boolean("\n".match(regex2)); } if (node2.quantifier) { this.isStarting = false; this.endRegexpStack = []; } else { const set6 = this.regex.substring(node2.loc.begin, node2.loc.end); this.endRegexpStack.push(set6); if (this.isStarting) { this.startRegexp += set6; } } } visitChildren(node2) { if (node2.type === "Group") { const group2 = node2; if (group2.quantifier) { return; } } super.visitChildren(node2); } }; visitor = new TerminalRegExpVisitor(); __name(getTerminalParts, "getTerminalParts"); __name(isMultilineComment, "isMultilineComment"); __name(isWhitespace2, "isWhitespace"); __name(escapeRegExp, "escapeRegExp"); __name(getCaseInsensitivePattern, "getCaseInsensitivePattern"); __name(partialMatches, "partialMatches"); __name(partialRegExp, "partialRegExp"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/utils/grammar-utils.js var grammar_utils_exports = {}; __export(grammar_utils_exports, { findAssignment: () => findAssignment, findNameAssignment: () => findNameAssignment, findNodeForKeyword: () => findNodeForKeyword, findNodeForProperty: () => findNodeForProperty, findNodesForKeyword: () => findNodesForKeyword, findNodesForKeywordInternal: () => findNodesForKeywordInternal, findNodesForProperty: () => findNodesForProperty, getActionAtElement: () => getActionAtElement, getActionType: () => getActionType, getAllReachableRules: () => getAllReachableRules, getCrossReferenceTerminal: () => getCrossReferenceTerminal, getEntryRule: () => getEntryRule, getExplicitRuleType: () => getExplicitRuleType, getHiddenRules: () => getHiddenRules, getRuleType: () => getRuleType, getTypeName: () => getTypeName, isArrayCardinality: () => isArrayCardinality, isArrayOperator: () => isArrayOperator, isCommentTerminal: () => isCommentTerminal, isDataType: () => isDataType, isDataTypeRule: () => isDataTypeRule, isOptionalCardinality: () => isOptionalCardinality, terminalRegex: () => terminalRegex }); 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 rules = /* @__PURE__ */ new Set(); for (const rule of grammar.rules) { if (ruleNames.has(rule.name) || isTerminalRule(rule) && rule.hidden) { rules.add(rule); } } return rules; } 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 getCrossReferenceTerminal(crossRef) { if (crossRef.terminal) { return crossRef.terminal; } else if (crossRef.type.ref) { const nameAssigment = findNameAssignment(crossRef.type.ref); return nameAssigment === null || nameAssigment === void 0 ? void 0 : nameAssigment.terminal; } return void 0; } function isCommentTerminal(terminalRule) { return terminalRule.hidden && !terminalRegex(terminalRule).test(" "); } function findNodesForProperty(node2, property2) { if (!node2 || !property2) { return []; } return findNodesForPropertyInternal(node2, property2, node2.astNode, true); } function findNodeForProperty(node2, property2, index) { if (!node2 || !property2) { return void 0; } const nodes7 = findNodesForPropertyInternal(node2, property2, node2.astNode, true); if (nodes7.length === 0) { return void 0; } if (index !== void 0) { index = Math.max(0, Math.min(index, nodes7.length - 1)); } else { index = 0; } return nodes7[index]; } function findNodesForPropertyInternal(node2, property2, element3, first3) { if (!first3) { const nodeFeature = getContainerOfType(node2.grammarSource, isAssignment); if (nodeFeature && nodeFeature.feature === property2) { return [node2]; } } if (isCompositeCstNode(node2) && node2.astNode === element3) { return node2.content.flatMap((e3) => findNodesForPropertyInternal(e3, property2, element3, false)); } return []; } function findNodesForKeyword(node2, keyword) { if (!node2) { return []; } return findNodesForKeywordInternal(node2, keyword, node2 === null || node2 === void 0 ? void 0 : node2.astNode); } function findNodeForKeyword(node2, keyword, index) { if (!node2) { return void 0; } const nodes7 = findNodesForKeywordInternal(node2, keyword, node2 === null || node2 === void 0 ? void 0 : node2.astNode); if (nodes7.length === 0) { return void 0; } if (index !== void 0) { index = Math.max(0, Math.min(index, nodes7.length - 1)); } else { index = 0; } return nodes7[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) { var _a; const astNode = cstNode.astNode; while (astNode === ((_a = cstNode.container) === null || _a === void 0 ? void 0 : _a.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 (isParserRule(startNode.$container)) { startNode = startNode.$container; } else { assertUnreachable(startNode.$container); } } return findNameAssignmentInternal(type3, startNode, /* @__PURE__ */ new Map()); } function findNameAssignmentInternal(type3, startNode, cache3) { var _a; 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"); 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) && ((_a = node2.typeRef) === null || _a === void 0 ? void 0 : _a.ref)) { return go(node2, node2.typeRef.ref); } } return void 0; } function getActionAtElement(element3) { const parent4 = element3.$container; if (isGroup(parent4)) { const elements4 = parent4.elements; const index = elements4.indexOf(element3); for (let i2 = index - 1; i2 >= 0; i2--) { const item = elements4[i2]; if (isAction(item)) { return item; } else { const action = streamAllContents(elements4[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; } } 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 (rule.inferredType) { return rule.inferredType.name; } else if (rule.dataType) { return rule.dataType; } else if (rule.returnType) { const refType = rule.returnType.ref; if (refType) { if (isParserRule(refType)) { return refType.name; } else if (isInterface(refType) || isType(refType)) { return refType.name; } } } return void 0; } function getTypeName(type3) { var _a; if (isParserRule(type3)) { return isDataTypeRule(type3) ? type3.name : (_a = getExplicitRuleType(type3)) !== null && _a !== void 0 ? _a : 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) { var _a; if (action.inferredType) { return action.inferredType.name; } else if ((_a = action.type) === null || _a === void 0 ? void 0 : _a.ref) { return getTypeName(action.type.ref); } return void 0; } function getRuleType(rule) { var _a, _b, _c; if (isTerminalRule(rule)) { return (_b = (_a = rule.type) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : "string"; } else { return isDataTypeRule(rule) ? rule.name : (_c = getExplicitRuleType(rule)) !== null && _c !== void 0 ? _c : 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 }); } 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, wrap: false }); } else if (isWildcard(element3)) { return withCardinality(WILDCARD, { cardinality: element3.cardinality, lookahead: element3.lookahead }); } else { throw new Error(`Invalid terminal element: ${element3 === null || element3 === void 0 ? void 0 : element3.$type}`); } } function terminalAlternativesToRegex(alternatives) { return withCardinality(alternatives.elements.map((e3) => abstractElementToRegex(e3)).join("|"), { cardinality: alternatives.cardinality, lookahead: alternatives.lookahead }); } function terminalGroupToRegex(group2) { return withCardinality(group2.elements.map((e3) => abstractElementToRegex(e3)).join(""), { cardinality: group2.cardinality, lookahead: group2.lookahead }); } function untilTokenToRegex(until) { return withCardinality(`${WILDCARD}*?${abstractElementToRegex(until.terminal)}`, { cardinality: until.cardinality, lookahead: until.lookahead }); } function negateTokenToRegex(negate2) { return withCardinality(`(?!${abstractElementToRegex(negate2.terminal)})${WILDCARD}*?`, { cardinality: negate2.cardinality, lookahead: negate2.lookahead }); } function characterRangeToRegex(range3) { if (range3.right) { return withCardinality(`[${keywordToRegex(range3.left)}-${keywordToRegex(range3.right)}]`, { cardinality: range3.cardinality, lookahead: range3.lookahead, wrap: false }); } return withCardinality(keywordToRegex(range3.left), { cardinality: range3.cardinality, lookahead: range3.lookahead, wrap: false }); } function keywordToRegex(keyword) { return escapeRegExp(keyword.value); } function withCardinality(regex2, options3) { var _a; if (options3.wrap !== false || options3.lookahead) { regex2 = `(${(_a = options3.lookahead) !== null && _a !== void 0 ? _a : ""}${regex2})`; } if (options3.cardinality) { return `${regex2}${options3.cardinality}`; } return regex2; } var WILDCARD; var init_grammar_utils = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/utils/grammar-utils.js"() { "use strict"; init_errors2(); init_ast(); init_syntax_tree(); init_ast_utils(); init_cst_utils(); init_regexp_utils(); __name(getEntryRule, "getEntryRule"); __name(getHiddenRules, "getHiddenRules"); __name(getAllReachableRules, "getAllReachableRules"); __name(ruleDfs, "ruleDfs"); __name(getCrossReferenceTerminal, "getCrossReferenceTerminal"); __name(isCommentTerminal, "isCommentTerminal"); __name(findNodesForProperty, "findNodesForProperty"); __name(findNodeForProperty, "findNodeForProperty"); __name(findNodesForPropertyInternal, "findNodesForPropertyInternal"); __name(findNodesForKeyword, "findNodesForKeyword"); __name(findNodeForKeyword, "findNodeForKeyword"); __name(findNodesForKeywordInternal, "findNodesForKeywordInternal"); __name(findAssignment, "findAssignment"); __name(findNameAssignment, "findNameAssignment"); __name(findNameAssignmentInternal, "findNameAssignmentInternal"); __name(getActionAtElement, "getActionAtElement"); __name(isOptionalCardinality, "isOptionalCardinality"); __name(isArrayCardinality, "isArrayCardinality"); __name(isArrayOperator, "isArrayOperator"); __name(isDataTypeRule, "isDataTypeRule"); __name(isDataTypeRuleInternal, "isDataTypeRuleInternal"); __name(isDataType, "isDataType"); __name(isDataTypeInternal, "isDataTypeInternal"); __name(getExplicitRuleType, "getExplicitRuleType"); __name(getTypeName, "getTypeName"); __name(getActionType, "getActionType"); __name(getRuleType, "getRuleType"); __name(terminalRegex, "terminalRegex"); WILDCARD = /[\s\S]/.source; __name(abstractElementToRegex, "abstractElementToRegex"); __name(terminalAlternativesToRegex, "terminalAlternativesToRegex"); __name(terminalGroupToRegex, "terminalGroupToRegex"); __name(untilTokenToRegex, "untilTokenToRegex"); __name(negateTokenToRegex, "negateTokenToRegex"); __name(characterRangeToRegex, "characterRangeToRegex"); __name(keywordToRegex, "keywordToRegex"); __name(withCardinality, "withCardinality"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/languages/grammar-config.js function createGrammarConfig(services) { const rules = []; const grammar = services.Grammar; for (const rule of grammar.rules) { if (isTerminalRule(rule) && isCommentTerminal(rule) && isMultilineComment(terminalRegex(rule))) { rules.push(rule.name); } } return { multilineCommentRules: rules, nameRegexp: DefaultNameRegexp }; } var init_grammar_config = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/languages/grammar-config.js"() { "use strict"; init_cst_utils(); init_grammar_utils(); init_regexp_utils(); init_ast(); __name(createGrammarConfig, "createGrammarConfig"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/version.js var init_version = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/version.js"() { "use strict"; } }); // ../../node_modules/.pnpm/@[email protected]/node_modules/@chevrotain/utils/lib/src/print.js function PRINT_ERROR(msg) { if (console && console.error) { console.error(`Error: ${msg}`); } } function PRINT_WARNING(msg) { if (console && console.warn) { console.warn(`Warning: ${msg}`); } } var init_print = __esm({ "../../node_modules/.pnpm/@[email protected]/node_modules/@chevrotain/utils/lib/src/print.js"() { "use strict"; __name(PRINT_ERROR, "PRINT_ERROR"); __name(PRINT_WARNING, "PRINT_WARNING"); } }); // ../../node_modules/.pnpm/@[email protected]/node_modules/@chevrotain/utils/lib/src/timer.js 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 }; } var init_timer2 = __esm({ "../../node_modules/.pnpm/@[email protected]/node_modules/@chevrotain/utils/lib/src/timer.js"() { "use strict"; __name(timer2, "timer"); } }); // ../../node_modules/.pnpm/@[email protected]/node_modules/@chevrotain/utils/lib/src/to-fast-properties.js function toFastProperties(toBecomeFast) { function FakeConstructor() { } __name(FakeConstructor, "FakeConstructor"); FakeConstructor.prototype = toBecomeFast; const fakeInstance = new FakeConstructor(); function fakeAccess() { return typeof fakeInstance.bar; } __name(fakeAccess, "fakeAccess"); fakeAccess(); fakeAccess(); if (1) return toBecomeFast; (0, eval)(toBecomeFast); } var init_to_fast_properties = __esm({ "../../node_modules/.pnpm/@[email protected]/node_modules/@chevrotain/utils/lib/src/to-fast-properties.js"() { "use strict"; __name(toFastProperties, "toFastProperties"); } }); // ../../node_modules/.pnpm/@[email protected]/node_modules/@chevrotain/utils/lib/src/api.js var init_api2 = __esm({ "../../node_modules/.pnpm/@[email protected]/node_modules/@chevrotain/utils/lib/src/api.js"() { "use strict"; init_print(); init_timer2(); init_to_fast_properties(); } }); // ../../node_modules/.pnpm/@[email protected]/node_modules/@chevrotain/gast/lib/src/model.js function tokenLabel(tokType) { if (hasTokenLabel(tokType)) { return tokType.LABEL; } else { return tokType.name; } } function hasTokenLabel(obj) { return isString_default(obj.LABEL) && obj.LABEL !== ""; } function serializeGrammar(topRules) { return map_default(topRules, serializeProduction); } function serializeProduction(node2) { function convertDefinition(definition) { return map_default(definition, serializeProduction); } __name(convertDefinition, "convertDefinition"); if (node2 instanceof NonTerminal) { const serializedNonTerminal = { type: "NonTerminal", name: node2.nonTerminalName, idx: node2.idx }; if (isString_default(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_default(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"); } } var AbstractProduction, NonTerminal, Rule, Alternative, Option2, RepetitionMandatory, RepetitionMandatoryWithSeparator, Repetition, RepetitionWithSeparator, Alternation, Terminal; var init_model = __esm({ "../../node_modules/.pnpm/@[email protected]/node_modules/@chevrotain/gast/lib/src/model.js"() { "use strict"; init_lodash(); __name(tokenLabel, "tokenLabel"); __name(hasTokenLabel, "hasTokenLabel"); AbstractProduction = class { static { __name(this, "AbstractProduction"); } get definition() { return this._definition; } set definition(value2) { this._definition = value2; } constructor(_definition) { this._definition = _definition; } accept(visitor2) { visitor2.visit(this); forEach_default(this.definition, (prod) => { prod.accept(visitor2); }); } }; NonTerminal = class extends AbstractProduction { static { __name(this, "NonTerminal"); } constructor(options3) { super([]); this.idx = 1; assign_default(this, pickBy_default(options3, (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"); } constructor(options3) { super(options3.definition); this.orgText = ""; assign_default(this, pickBy_default(options3, (v3) => v3 !== void 0)); } }; Alternative = class extends AbstractProduction { static { __name(this, "Alternative"); } constructor(options3) { super(options3.definition); this.ignoreAmbiguities = false; assign_default(this, pickBy_default(options3, (v3) => v3 !== void 0)); } }; Option2 = class extends AbstractProduction { static { __name(this, "Option"); } constructor(options3) { super(options3.definition); this.idx = 1; assign_default(this, pickBy_default(options3, (v3) => v3 !== void 0)); } }; RepetitionMandatory = class extends AbstractProduction { static { __name(this, "RepetitionMandatory"); } constructor(options3) { super(options3.definition); this.idx = 1; assign_default(this, pickBy_default(options3, (v3) => v3 !== void 0)); } }; RepetitionMandatoryWithSeparator = class extends AbstractProduction { static { __name(this, "RepetitionMandatoryWithSeparator"); } constructor(options3) { super(options3.definition); this.idx = 1; assign_default(this, pickBy_default(options3, (v3) => v3 !== void 0)); } }; Repetition = class extends AbstractProduction { static { __name(this, "Repetition"); } constructor(options3) { super(options3.definition); this.idx = 1; assign_default(this, pickBy_default(options3, (v3) => v3 !== void 0)); } }; RepetitionWithSeparator = class extends AbstractProduction { static { __name(this, "RepetitionWithSeparator"); } constructor(options3) { super(options3.definition); this.idx = 1; assign_default(this, pickBy_default(options3, (v3) => v3 !== void 0)); } }; Alternation = class extends AbstractProduction { static { __name(this, "Alternation"); } get definition() { return this._definition; } set definition(value2) { this._definition = value2; } constructor(options3) { super(options3.definition); this.idx = 1; this.ignoreAmbiguities = false; this.hasPredicates = false; assign_default(this, pickBy_default(options3, (v3) => v3 !== void 0)); } }; Terminal = class { static { __name(this, "Terminal"); } constructor(options3) { this.idx = 1; assign_default(this, pickBy_default(options3, (v3) => v3 !== void 0)); } accept(visitor2) { visitor2.visit(this); } }; __name(serializeGrammar, "serializeGrammar"); __name(serializeProduction, "serializeProduction"); } }); // ../../node_modules/.pnpm/@[email protected]/node_modules/@chevrotain/gast/lib/src/visitor.js var GAstVisitor; var init_visitor = __esm({ "../../node_modules/.pnpm/@[email protected]/node_modules/@chevrotain/gast/lib/src/visitor.js"() { "use strict"; init_model(); GAstVisitor = class { static { __name(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); 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) { } }; } }); // ../../node_modules/.pnpm/@[email protected]/node_modules/@chevrotain/gast/lib/src/helpers.js 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"); } } var init_helpers = __esm({ "../../node_modules/.pnpm/@[email protected]/node_modules/@chevrotain/gast/lib/src/helpers.js"() { "use strict"; init_lodash(); init_model(); __name(isSequenceProd, "isSequenceProd"); __name(isOptionalProd, "isOptionalProd"); __name(isBranchingProd, "isBranchingProd"); __name(getProductionDslName, "getProductionDslName"); } }); // ../../node_modules/.pnpm/@[email protected]/node_modules/@chevrotain/gast/lib/src/api.js var init_api3 = __esm({ "../../node_modules/.pnpm/@[email protected]/node_modules/@chevrotain/gast/lib/src/api.js"() { "use strict"; init_model(); init_visitor(); init_helpers(); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/grammar/rest.js 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; } var RestWalker; var init_rest = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/grammar/rest.js"() { "use strict"; init_lodash(); init_api3(); RestWalker = class { static { __name(this, "RestWalker"); } walk(prod, prevRest = []) { forEach_default(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_default(orProd.definition, (alt) => { const prodWrapper = new Alternative({ definition: [alt] }); this.walk(prodWrapper, fullOrRest); }); } }; __name(restForRepetitionWithSeparator, "restForRepetitionWithSeparator"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/grammar/first.js function first(prod) { if (prod instanceof NonTerminal) { return first(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(first(currSubProd)); nextSubProdIdx = nextSubProdIdx + 1; hasInnerProdsRemaining = seq2.length > nextSubProdIdx; } return uniq_default(firstSet); } function firstForBranching(prod) { const allAlternativesFirsts = map_default(prod.definition, (innerProd) => { return first(innerProd); }); return uniq_default(flatten_default(allAlternativesFirsts)); } function firstForTerminal(terminal) { return [terminal.terminalType]; } var init_first2 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/grammar/first.js"() { "use strict"; init_lodash(); init_api3(); __name(first, "first"); __name(firstForSequence, "firstForSequence"); __name(firstForBranching, "firstForBranching"); __name(firstForTerminal, "firstForTerminal"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/constants.js var IN; var init_constants2 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/constants.js"() { "use strict"; IN = "_~IN~_"; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/grammar/follow.js function computeAllProdsFollows(topProductions) { const reSyncFollows = {}; forEach_default(topProductions, (topProd) => { const currRefsFollow = new ResyncFollowsWalker(topProd).startWalking(); assign_default(reSyncFollows, currRefsFollow); }); return reSyncFollows; } function buildBetweenProdsFollowPrefix(inner2, occurenceInParent) { return inner2.name + occurenceInParent + IN; } var ResyncFollowsWalker; var init_follow = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/grammar/follow.js"() { "use strict"; init_rest(); init_first2(); init_lodash(); init_constants2(); init_api3(); ResyncFollowsWalker = class extends RestWalker { static { __name(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 = first(restProd); this.follows[followName] = t_in_topProd_follows; } }; __name(computeAllProdsFollows, "computeAllProdsFollows"); __name(buildBetweenProdsFollowPrefix, "buildBetweenProdsFollowPrefix"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/scan/reg_exp_parser.js 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 = {}; } var regExpAstCache, regExpParser; var init_reg_exp_parser = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/scan/reg_exp_parser.js"() { "use strict"; init_api(); regExpAstCache = {}; regExpParser = new RegExpParser(); __name(getRegExpAst, "getRegExpAst"); __name(clearRegExpParserCache, "clearRegExpParserCache"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/scan/reg_exp.js 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": case "GroupBackReference": case "Lookahead": case "NegativeLookahead": 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_default(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; 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; default: throw Error("non exhaustive match!"); } return values_default(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_default(setNode.value, (codeOrRange) => { if (typeof codeOrRange === "number") { return includes_default(targetCharCodes, codeOrRange); } else { const range3 = codeOrRange; return find_default(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_default(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_default(pattern, (char2) => { return includes_default(charCodes, char2.charCodeAt(0)); }) !== void 0; } } var complementErrorMessage, failedOptimizationPrefixMsg, CharCodeFinder; var init_reg_exp = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/scan/reg_exp.js"() { "use strict"; init_api(); init_lodash(); init_api2(); init_reg_exp_parser(); init_lexer(); complementErrorMessage = "Complement Sets are not supported for first char optimization"; failedOptimizationPrefixMsg = 'Unable to use "first char" lexer optimizations:\n'; __name(getOptimizedStartCodesIndices, "getOptimizedStartCodesIndices"); __name(firstCharOptimizedIndices, "firstCharOptimizedIndices"); __name(addOptimizedIdxToResult, "addOptimizedIdxToResult"); __name(handleIgnoreCase, "handleIgnoreCase"); __name(findCode, "findCode"); __name(isWholeOptional, "isWholeOptional"); CharCodeFinder = class extends BaseRegExpVisitor { static { __name(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; } 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"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/scan/lexer.js function analyzeTokenTypes(tokenTypes, options3) { options3 = defaults_default(options3, { useSticky: SUPPORT_STICKY, debug: false, safeMode: false, positionTracking: "full", lineTerminatorCharacters: ["\r", "\n"], tracer: /* @__PURE__ */ __name((msg, action) => action(), "tracer") }); const tracer = options3.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_default(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 options3.useSticky ? addStickyFlag(currPattern) : addStartOfInput(currPattern); } } else if (isFunction_default(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 options3.useSticky ? addStickyFlag(wrappedRegExp) : addStartOfInput(wrappedRegExp); } } else { throw Error("non exhaustive match"); } }); }); let patternIdxToType; let patternIdxToGroup; let patternIdxToLongerAltIdxArr; let patternIdxToPushMode; let patternIdxToPopMode; tracer("misc mapping", () => { patternIdxToType = map_default(onlyRelevantTypes, (currType) => currType.tokenTypeIdx); patternIdxToGroup = map_default(onlyRelevantTypes, (clazz) => { const groupName = clazz.GROUP; if (groupName === Lexer2.SKIPPED) { return void 0; } else if (isString_default(groupName)) { return groupName; } else if (isUndefined_default(groupName)) { return false; } else { throw Error("non exhaustive match"); } }); patternIdxToLongerAltIdxArr = map_default(onlyRelevantTypes, (clazz) => { const longerAltType = clazz.LONGER_ALT; if (longerAltType) { const longerAltIdxArr = isArray_default(longerAltType) ? map_default(longerAltType, (type3) => indexOf_default(onlyRelevantTypes, type3)) : [indexOf_default(onlyRelevantTypes, longerAltType)]; return longerAltIdxArr; } }); patternIdxToPushMode = map_default(onlyRelevantTypes, (clazz) => clazz.PUSH_MODE); patternIdxToPopMode = map_default(onlyRelevantTypes, (clazz) => has_default(clazz, "POP_MODE")); }); let patternIdxToCanLineTerminator; tracer("Line Terminator Handling", () => { const lineTerminatorCharCodes = getCharCodes(options3.lineTerminatorCharacters); patternIdxToCanLineTerminator = map_default(onlyRelevantTypes, (tokType) => false); if (options3.positionTracking !== "onlyOffset") { patternIdxToCanLineTerminator = map_default(onlyRelevantTypes, (tokType) => { if (has_default(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_default(onlyRelevantTypes, isCustomPattern); patternIdxToShort = map_default(allTransformedPatterns, isShortPattern); emptyGroups = reduce_default(onlyRelevantTypes, (acc, clazz) => { const groupName = clazz.GROUP; if (isString_default(groupName) && !(groupName === Lexer2.SKIPPED)) { acc[groupName] = []; } return acc; }, {}); patternIdxToConfig = map_default(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 (!options3.safeMode) { tracer("First Char Optimization", () => { charCodeToPatternIdxToConfig = reduce_default(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_default(currTokType.START_CHARS_HINT)) { let lastOptimizedIdx; forEach_default(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 (options3.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, options3.ensureOptimizations); if (isEmpty_default(optimizedCodes)) { canBeOptimized = false; } forEach_default(optimizedCodes, (code) => { addToMapOfArrays(result, code, patternIdxToConfig[idx]); }); } } else { if (options3.ensureOptimizations) { PRINT_ERROR(`${failedOptimizationPrefixMsg} TokenType: <${currTokType.name}> is using a custom token pattern without providing 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_default3(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_default3(tokenTypes, (currType) => { return !has_default(currType, PATTERN); }); const errors = map_default(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_default3(tokenTypes, (currType) => { const pattern = currType[PATTERN]; return !isRegExp_default(pattern) && !isFunction_default(pattern) && !has_default(pattern, "exec") && !isString_default(pattern); }); const errors = map_default(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"); } constructor() { super(...arguments); this.found = false; } visitEndAnchor(node2) { this.found = true; } } const invalidRegex = filter_default3(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_default(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_default3(tokenTypes, (currType) => { const pattern = currType.PATTERN; return pattern.test(""); }); const errors = map_default(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"); } constructor() { super(...arguments); this.found = false; } visitStartAnchor(node2) { this.found = true; } } const invalidRegex = filter_default3(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_default(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_default3(tokenTypes, (currType) => { const pattern = currType[PATTERN]; return pattern instanceof RegExp && (pattern.multiline || pattern.global); }); const errors = map_default(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_default(tokenTypes, (outerType) => { return reduce_default(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_default3(identicalPatterns, (currIdenticalSet) => { return currIdenticalSet.length > 1; }); const errors = map_default(duplicatePatterns, (setOfIdentical) => { const tokenTypeNames = map_default(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_default3(tokenTypes, (clazz) => { if (!has_default(clazz, "GROUP")) { return false; } const group2 = clazz.GROUP; return group2 !== Lexer2.SKIPPED && group2 !== Lexer2.NA && !isString_default(group2); }); const errors = map_default(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_default3(tokenTypes, (clazz) => { return clazz.PUSH_MODE !== void 0 && !includes_default(validModes, clazz.PUSH_MODE); }); const errors = map_default(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_default(tokenTypes, (result, tokType, idx) => { const pattern = tokType.PATTERN; if (pattern === Lexer2.NA) { return result; } if (isString_default(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_default(tokenTypes, (tokType, testIdx) => { forEach_default(canBeTested, ({ str: str2, idx, tokenType }) => { if (testIdx < idx && testTokenType(str2, tokType.PATTERN)) { const msg = `Token: ->${tokenType.name}<- can never be matched. Because it appears AFTER the Token Type ->${tokType.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: [tokType, tokenType] }); } }); }); return errors; } function testTokenType(str2, pattern) { if (isRegExp_default(pattern)) { const regExpArray = pattern.exec(str2); return regExpArray !== null && regExpArray.index === 0; } else if (isFunction_default(pattern)) { return pattern(str2, 0, [], {}); } else if (has_default(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_default(metaChars, (char2) => regExp.source.indexOf(char2) !== -1) === void 0; } function addStartOfInput(pattern) { const flags = pattern.ignoreCase ? "i" : ""; return new RegExp(`^(?:${pattern.source})`, flags); } function addStickyFlag(pattern) { const flags = pattern.ignoreCase ? "iy" : "y"; return new RegExp(`${pattern.source}`, flags); } function performRuntimeChecks(lexerDefinition, trackLines, lineTerminatorCharacters) { const errors = []; if (!has_default(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_default(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_default(lexerDefinition, MODES) && has_default(lexerDefinition, DEFAULT_MODE) && !has_default(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_default(lexerDefinition, MODES)) { forEach_default(lexerDefinition.modes, (currModeValue, currModeName) => { forEach_default(currModeValue, (currTokType, currIdx) => { if (isUndefined_default(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_default(currTokType, "LONGER_ALT")) { const longerAlt = isArray_default(currTokType.LONGER_ALT) ? currTokType.LONGER_ALT : [currTokType.LONGER_ALT]; forEach_default(longerAlt, (currLongerAlt) => { if (!isUndefined_default(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_default(values_default(lexerDefinition.modes))); const concreteTokenTypes = reject_default(allTokenTypes, (currType) => currType[PATTERN] === Lexer2.NA); const terminatorCharCodes = getCharCodes(lineTerminatorCharacters); if (trackLines) { forEach_default(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_default(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_default(emptyGroups); forEach_default(groupKeys, (currKey) => { const currGroupValue = emptyGroups[currKey]; if (isArray_default(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_default(pattern)) { return true; } else if (has_default(pattern, "exec")) { return true; } else if (isString_default(pattern)) { return false; } else { throw Error("non exhaustive match"); } } function isShortPattern(pattern) { if (isString_default(pattern) && pattern.length === 1) { return pattern.charCodeAt(0); } else { return false; } } function checkLineBreaksIssues(tokType, lineTerminatorCharCodes) { if (has_default(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_default(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 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_default(charsOrCodes, (numOrString) => { if (isString_default(numOrString)) { return numOrString.charCodeAt(0); } else { return numOrString; } }); return charCodes; } function addToMapOfArrays(map5, key, value2) { if (map5[key] === void 0) { map5[key] = [value2]; } else { map5[key].push(value2); } } function charCodeToOptimizedIndex(charCode) { return charCode < minOptimizationVal ? charCode : charCodeToOptimizedIdxMap[charCode]; } function initCharCodeToOptimizedIndexMap() { if (isEmpty_default(charCodeToOptimizedIdxMap)) { charCodeToOptimizedIdxMap = new Array(65536); for (let i2 = 0; i2 < 65536; i2++) { charCodeToOptimizedIdxMap[i2] = i2 > 255 ? 255 + ~~(i2 / 255) : i2; } } } var PATTERN, DEFAULT_MODE, MODES, SUPPORT_STICKY, end_of_input, start_of_input, LineTerminatorOptimizedTester, minOptimizationVal, charCodeToOptimizedIdxMap; var init_lexer = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/scan/lexer.js"() { "use strict"; init_api(); init_lexer_public(); init_lodash(); init_api2(); init_reg_exp(); init_reg_exp_parser(); PATTERN = "PATTERN"; DEFAULT_MODE = "defaultMode"; MODES = "modes"; SUPPORT_STICKY = typeof new RegExp("(?:)").sticky === "boolean"; __name(analyzeTokenTypes, "analyzeTokenTypes"); __name(validatePatterns, "validatePatterns"); __name(validateRegExpPattern, "validateRegExpPattern"); __name(findMissingPatterns, "findMissingPatterns"); __name(findInvalidPatterns, "findInvalidPatterns"); end_of_input = /[^\\][$]/; __name(findEndOfInputAnchor, "findEndOfInputAnchor"); __name(findEmptyMatchRegExps, "findEmptyMatchRegExps"); start_of_input = /[^\\[][\^]|^\^/; __name(findStartOfInputAnchor, "findStartOfInputAnchor"); __name(findUnsupportedFlags, "findUnsupportedFlags"); __name(findDuplicatePatterns, "findDuplicatePatterns"); __name(findInvalidGroupType, "findInvalidGroupType"); __name(findModesThatDoNotExist, "findModesThatDoNotExist"); __name(findUnreachablePatterns, "findUnreachablePatterns"); __name(testTokenType, "testTokenType"); __name(noMetaChar, "noMetaChar"); __name(addStartOfInput, "addStartOfInput"); __name(addStickyFlag, "addStickyFlag"); __name(performRuntimeChecks, "performRuntimeChecks"); __name(performWarningRuntimeChecks, "performWarningRuntimeChecks"); __name(cloneEmptyGroups, "cloneEmptyGroups"); __name(isCustomPattern, "isCustomPattern"); __name(isShortPattern, "isShortPattern"); LineTerminatorOptimizedTester = { // implements /\n|\r\n?/g.test test: /* @__PURE__ */ __name(function(text3) { const len = text3.length; for (let i2 = this.lastIndex; i2 < len; i2++) { const c3 = text3.charCodeAt(i2); if (c3 === 10) { this.lastIndex = i2 + 1; return true; } else if (c3 === 13) { if (text3.charCodeAt(i2 + 1) === 10) { this.lastIndex = i2 + 2; } else { this.lastIndex = i2 + 1; } return true; } } return false; }, "test"), lastIndex: 0 }; __name(checkLineBreaksIssues, "checkLineBreaksIssues"); __name(buildLineBreakIssueMessage, "buildLineBreakIssueMessage"); __name(getCharCodes, "getCharCodes"); __name(addToMapOfArrays, "addToMapOfArrays"); minOptimizationVal = 256; charCodeToOptimizedIdxMap = []; __name(charCodeToOptimizedIndex, "charCodeToOptimizedIndex"); __name(initCharCodeToOptimizedIndexMap, "initCharCodeToOptimizedIndexMap"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/scan/tokens.js 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_default(tokenTypesAndParents, (tokType) => { tokType.isParent = tokType.categoryMatches.length > 0; }); } function expandCategories(tokenTypes) { let result = clone_default2(tokenTypes); let categories = tokenTypes; let searching = true; while (searching) { categories = compact_default(flatten_default(map_default(categories, (currTokType) => currTokType.CATEGORIES))); const newCategories = difference_default(categories, result); result = result.concat(newCategories); if (isEmpty_default(newCategories)) { searching = false; } else { categories = newCategories; } } return result; } function assignTokenDefaultProps(tokenTypes) { forEach_default(tokenTypes, (currTokType) => { if (!hasShortKeyProperty(currTokType)) { tokenIdxToClass[tokenShortNameIdx] = currTokType; currTokType.tokenTypeIdx = tokenShortNameIdx++; } if (hasCategoriesProperty(currTokType) && !isArray_default(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_default(tokenTypes, (currTokType) => { currTokType.categoryMatches = []; forEach_default(currTokType.categoryMatchesMap, (val, key) => { currTokType.categoryMatches.push(tokenIdxToClass[key].tokenTypeIdx); }); }); } function assignCategoriesMapProp(tokenTypes) { forEach_default(tokenTypes, (currTokType) => { singleAssignCategoriesToksMap([], currTokType); }); } function singleAssignCategoriesToksMap(path4, nextNode) { forEach_default(path4, (pathNode) => { nextNode.categoryMatchesMap[pathNode.tokenTypeIdx] = true; }); forEach_default(nextNode.CATEGORIES, (nextCategory) => { const newPath = path4.concat(nextNode); if (!includes_default(newPath, nextCategory)) { singleAssignCategoriesToksMap(newPath, nextCategory); } }); } function hasShortKeyProperty(tokType) { return has_default(tokType, "tokenTypeIdx"); } function hasCategoriesProperty(tokType) { return has_default(tokType, "CATEGORIES"); } function hasExtendingTokensTypesProperty(tokType) { return has_default(tokType, "categoryMatches"); } function hasExtendingTokensTypesMapProperty(tokType) { return has_default(tokType, "categoryMatchesMap"); } function isTokenType(tokType) { return has_default(tokType, "tokenTypeIdx"); } var tokenShortNameIdx, tokenIdxToClass; var init_tokens = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/scan/tokens.js"() { "use strict"; init_lodash(); __name(tokenStructuredMatcher, "tokenStructuredMatcher"); __name(tokenStructuredMatcherNoCategories, "tokenStructuredMatcherNoCategories"); tokenShortNameIdx = 1; tokenIdxToClass = {}; __name(augmentTokenTypes, "augmentTokenTypes"); __name(expandCategories, "expandCategories"); __name(assignTokenDefaultProps, "assignTokenDefaultProps"); __name(assignCategoriesTokensProp, "assignCategoriesTokensProp"); __name(assignCategoriesMapProp, "assignCategoriesMapProp"); __name(singleAssignCategoriesToksMap, "singleAssignCategoriesToksMap"); __name(hasShortKeyProperty, "hasShortKeyProperty"); __name(hasCategoriesProperty, "hasCategoriesProperty"); __name(hasExtendingTokensTypesProperty, "hasExtendingTokensTypesProperty"); __name(hasExtendingTokensTypesMapProperty, "hasExtendingTokensTypesMapProperty"); __name(isTokenType, "isTokenType"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/scan/lexer_errors_public.js var defaultLexerErrorProvider; var init_lexer_errors_public = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/scan/lexer_errors_public.js"() { "use strict"; 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) { return `unexpected character: ->${fullText.charAt(startOffset)}<- at offset: ${startOffset}, skipped ${length2} characters.`; } }; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/scan/lexer_public.js var LexerDefinitionErrorType, DEFAULT_LEXER_CONFIG, Lexer2; var init_lexer_public = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/scan/lexer_public.js"() { "use strict"; init_lexer(); init_lodash(); init_api2(); init_tokens(); init_lexer_errors_public(); init_reg_exp_parser(); (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"); } constructor(lexerDefinition, config6 = 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 config6 === "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, config6); 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 property on the Lexer config.\n For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS"); } } if (config6.safeMode && config6.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_default(lexerDefinition)) { actualDefinition = { modes: { defaultMode: clone_default2(lexerDefinition) }, defaultMode: DEFAULT_MODE }; } else { hasOnlySingleMode = false; actualDefinition = clone_default2(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_default(actualDefinition.modes, (currModeValue, currModeName) => { actualDefinition.modes[currModeName] = reject_default(currModeValue, (currTokType) => isUndefined_default(currTokType)); }); const allModeNames = keys_default(actualDefinition.modes); forEach_default(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_default(this.lexerDefinitionErrors)) { augmentTokenTypes(currModDef); let currAnalyzeResult; this.TRACE_INIT(`analyzeTokenTypes`, () => { currAnalyzeResult = analyzeTokenTypes(currModDef, { lineTerminatorCharacters: this.config.lineTerminatorCharacters, positionTracking: config6.positionTracking, ensureOptimizations: config6.ensureOptimizations, safeMode: config6.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_default(this.lexerDefinitionErrors) && !this.config.deferDefinitionErrorsHandling) { const allErrMessages = map_default(this.lexerDefinitionErrors, (error3) => { return error3.message; }); const allErrMessagesString = allErrMessages.join("-----------------------\n"); throw new Error("Errors detected in definition of Lexer:\n" + allErrMessagesString); } forEach_default(this.lexerDefinitionWarning, (warningDescriptor) => { PRINT_WARNING(warningDescriptor.message); }); this.TRACE_INIT("Choosing sub-methods implementations", () => { if (SUPPORT_STICKY) { this.chopInput = identity_default4; this.match = this.matchWithTest; } else { this.updateLastIndex = noop_default2; this.match = this.matchWithExec; } if (hasOnlySingleMode) { this.handleModes = noop_default2; } if (this.trackStartLines === false) { this.computeNewColumn = identity_default4; } if (this.trackEndLines === false) { this.updateTokenEndLineColumnLocation = noop_default2; } 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 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_default(this.canModeBeOptimized, (cannotBeOptimized, canBeOptimized, modeName) => { if (canBeOptimized === false) { cannotBeOptimized.push(modeName); } return cannotBeOptimized; }, []); if (config6.ensureOptimizations && !isEmpty_default(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(text3, initialMode = this.defaultMode) { if (!isEmpty_default(this.lexerDefinitionErrors)) { const allErrMessages = map_default(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(text3, 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(text3, initialMode) { let i2, j2, k2, matchAltImage, longerAlt, matchedImage, payload, altPayload, imageLength, group2, tokType, newToken, errLength, droppedChar, msg, match2; const orgText = text3; const orgLength = orgText.length; let offset = 0; let matchedTokensIndex = 0; const guessedNumberOfTokens = this.hasCustom ? 0 : Math.floor(text3.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 getPossiblePatterns; function getPossiblePatternsSlow() { return patternIdxToConfig; } __name(getPossiblePatternsSlow, "getPossiblePatternsSlow"); function getPossiblePatternsOptimized(charCode) { const optimizedCharIdx = charCodeToOptimizedIndex(charCode); const possiblePatterns = currCharCodeToPatternIdxToConfig[optimizedCharIdx]; if (possiblePatterns === void 0) { return emptyArray; } else { return possiblePatterns; } } __name(getPossiblePatternsOptimized, "getPossiblePatternsOptimized"); const pop_mode = /* @__PURE__ */ __name((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_default(modeStack); patternIdxToConfig = this.patternIdxToConfig[newMode]; currCharCodeToPatternIdxToConfig = this.charCodeToPatternIdxToConfig[newMode]; currModePatternsLength = patternIdxToConfig.length; const modeCanBeOptimized = this.canModeBeOptimized[newMode] && this.config.safeMode === false; if (currCharCodeToPatternIdxToConfig && modeCanBeOptimized) { getPossiblePatterns = getPossiblePatternsOptimized; } else { getPossiblePatterns = getPossiblePatternsSlow; } } }, "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) { getPossiblePatterns = getPossiblePatternsOptimized; } else { getPossiblePatterns = getPossiblePatternsSlow; } } __name(push_mode, "push_mode"); push_mode.call(this, initialMode); let currConfig; const recoveryEnabled = this.config.recoveryEnabled; while (offset < orgLength) { matchedImage = null; const nextCharCode = orgText.charCodeAt(offset); const chosenPatternIdxToConfig = getPossiblePatterns(nextCharCode); 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) { matchedImage = currPattern; } } else if (currConfig.isCustom === true) { match2 = currPattern.exec(orgText, offset, matchedTokens, groups); if (match2 !== null) { matchedImage = match2[0]; if (match2.payload !== void 0) { payload = match2.payload; } } else { matchedImage = null; } } else { this.updateLastIndex(currPattern, offset); matchedImage = this.match(currPattern, text3, offset); } if (matchedImage !== null) { longerAlt = currConfig.longerAlt; if (longerAlt !== void 0) { 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) { match2 = longerAltPattern.exec(orgText, offset, matchedTokens, groups); if (match2 !== null) { matchAltImage = match2[0]; if (match2.payload !== void 0) { altPayload = match2.payload; } } else { matchAltImage = null; } } else { this.updateLastIndex(longerAltPattern, offset); matchAltImage = this.match(longerAltPattern, text3, offset); } if (matchAltImage && matchAltImage.length > matchedImage.length) { matchedImage = matchAltImage; payload = altPayload; currConfig = longerAltConfig; break; } } } break; } } if (matchedImage !== null) { imageLength = matchedImage.length; group2 = currConfig.group; if (group2 !== void 0) { 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); } } text3 = this.chopInput(text3, imageLength); offset = offset + imageLength; column2 = this.computeNewColumn(column2, imageLength); if (trackLines === true && currConfig.canLineTerminator === true) { let numOfLTsInMatch = 0; let foundTerminator; let lastLTEndOffset; lineTerminatorPattern.lastIndex = 0; do { 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); } } 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) { text3 = this.chopInput(text3, 1); offset++; for (j2 = 0; j2 < currModePatternsLength; j2++) { const currConfig2 = patternIdxToConfig[j2]; 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 { this.updateLastIndex(currPattern, offset); foundResyncPoint = currPattern.exec(text3) !== null; } if (foundResyncPoint === true) { break; } } } errLength = offset - errorStartOffset; column2 = this.computeNewColumn(column2, errLength); msg = this.config.errorMessageProvider.buildUnexpectedCharactersMessage(orgText, errorStartOffset, errLength, errorLine, errorColumn); 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(config6, pop_mode, push_mode, newToken) { if (config6.pop === true) { const pushMode = config6.push; pop_mode(newToken); if (pushMode !== void 0) { push_mode.call(this, pushMode); } } else if (config6.push !== void 0) { push_mode.call(this, config6.push); } } chopInput(text3, length2) { return text3.substring(length2); } updateLastIndex(regExp, newLastIndex) { regExp.lastIndex = newLastIndex; } // 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; } } matchWithTest(pattern, text3, offset) { const found = pattern.test(text3); if (found === true) { return text3.substring(offset, pattern.lastIndex); } return null; } matchWithExec(pattern, text3) { const regExpArray = pattern.exec(text3); return regExpArray !== null ? regExpArray[0] : null; } }; Lexer2.SKIPPED = "This marks a skipped Token pattern, this means each token identified by it willbe consumed and then thrown into oblivion, this can be used to for example to completely ignore whitespace."; Lexer2.NA = /NOT_APPLICABLE/; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/scan/tokens_public.js function tokenLabel2(tokType) { if (hasTokenLabel2(tokType)) { return tokType.LABEL; } else { return tokType.name; } } function hasTokenLabel2(obj) { return isString_default(obj.LABEL) && obj.LABEL !== ""; } function createToken(config6) { return createTokenInternal(config6); } function createTokenInternal(config6) { const pattern = config6.pattern; const tokenType = {}; tokenType.name = config6.name; if (!isUndefined_default(pattern)) { tokenType.PATTERN = pattern; } if (has_default(config6, PARENT)) { throw "The parent property is no longer supported.\nSee: https://github.com/chevrotain/chevrotain/issues/564#issuecomment-349062346 for details."; } if (has_default(config6, CATEGORIES)) { tokenType.CATEGORIES = config6[CATEGORIES]; } augmentTokenTypes([tokenType]); if (has_default(config6, LABEL)) { tokenType.LABEL = config6[LABEL]; } if (has_default(config6, GROUP)) { tokenType.GROUP = config6[GROUP]; } if (has_default(config6, POP_MODE)) { tokenType.POP_MODE = config6[POP_MODE]; } if (has_default(config6, PUSH_MODE)) { tokenType.PUSH_MODE = config6[PUSH_MODE]; } if (has_default(config6, LONGER_ALT)) { tokenType.LONGER_ALT = config6[LONGER_ALT]; } if (has_default(config6, LINE_BREAKS)) { tokenType.LINE_BREAKS = config6[LINE_BREAKS]; } if (has_default(config6, START_CHARS_HINT)) { tokenType.START_CHARS_HINT = config6[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); } var PARENT, CATEGORIES, LABEL, GROUP, PUSH_MODE, POP_MODE, LONGER_ALT, LINE_BREAKS, START_CHARS_HINT, EOF; var init_tokens_public = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/scan/tokens_public.js"() { "use strict"; init_lodash(); init_lexer_public(); init_tokens(); __name(tokenLabel2, "tokenLabel"); __name(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"); __name(createTokenInternal, "createTokenInternal"); EOF = createToken({ name: "EOF", pattern: Lexer2.NA }); augmentTokenTypes([EOF]); __name(createTokenInstance, "createTokenInstance"); __name(tokenMatcher, "tokenMatcher"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/errors_public.js var defaultParserErrorProvider, defaultGrammarResolverErrorProvider, defaultGrammarValidatorErrorProvider; var init_errors_public = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/errors_public.js"() { "use strict"; init_tokens_public(); init_lodash(); init_api3(); 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_default(expectedPathsPerAlt, (result, currAltPaths) => result.concat(currAltPaths), []); const nextValidTokenSequences = map_default(allLookAheadPaths, (currPath) => `[${map_default(currPath, (currTokenType) => tokenLabel2(currTokenType)).join(", ")}]`); const nextValidSequenceItems = map_default(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_default(expectedIterationPaths, (currPath) => `[${map_default(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, "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(options3) { const pathMsg = map_default(options3.prefixPath, (currTok) => tokenLabel2(currTok)).join(", "); const occurrence = options3.alternation.idx === 0 ? "" : options3.alternation.idx; const errMsg = `Ambiguous alternatives: <${options3.ambiguityIndices.join(" ,")}> due to common lookahead prefix in inside <${options3.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(options3) { const pathMsg = map_default(options3.prefixPath, (currtok) => tokenLabel2(currtok)).join(", "); const occurrence = options3.alternation.idx === 0 ? "" : options3.alternation.idx; let currMessage = `Ambiguous Alternatives Detected: <${options3.ambiguityIndices.join(" ,")}> in inside <${options3.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; }, buildEmptyRepetitionError(options3) { let dslName = getProductionDslName(options3.repetition); if (options3.repetition.idx !== 0) { dslName += options3.repetition.idx; } const errMsg = `The repetition <${dslName}> within Rule <${options3.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(options3) { return "deprecated"; }, buildEmptyAlternationError(options3) { const errMsg = `Ambiguous empty alternative: <${options3.emptyChoiceIdx + 1}> in inside <${options3.topLevelRule.name}> Rule. Only the last alternative may be an empty alternative.`; return errMsg; }, buildTooManyAlternativesError(options3) { const errMsg = `An Alternation cannot have more than 256 alternatives: inside <${options3.topLevelRule.name}> Rule. has ${options3.alternation.definition.length + 1} alternatives.`; return errMsg; }, buildLeftRecursionError(options3) { const ruleName = options3.topLevelRule.name; const pathNames = map_default(options3.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(options3) { return "deprecated"; }, buildDuplicateRuleNameError(options3) { let ruleName; if (options3.topLevelRule instanceof Rule) { ruleName = options3.topLevelRule.name; } else { ruleName = options3.topLevelRule; } const errMsg = `Duplicate definition, rule: ->${ruleName}<- is already defined in the grammar: ->${options3.grammarName}<-`; return errMsg; } }; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/grammar/resolver.js function resolveGrammar(topLevels, errMsgProvider) { const refResolver = new GastRefResolverVisitor(topLevels, errMsgProvider); refResolver.resolveRefs(); return refResolver.errors; } var GastRefResolverVisitor; var init_resolver = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/grammar/resolver.js"() { "use strict"; init_parser(); init_lodash(); init_api3(); __name(resolveGrammar, "resolveGrammar"); GastRefResolverVisitor = class extends GAstVisitor { static { __name(this, "GastRefResolverVisitor"); } constructor(nameToTopRule, errMsgProvider) { super(); this.nameToTopRule = nameToTopRule; this.errMsgProvider = errMsgProvider; this.errors = []; } resolveRefs() { forEach_default(values_default(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; } } }; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/grammar/interpreter.js function possiblePathsFrom(targetDef, maxLength, currPath = []) { currPath = clone_default2(currPath); let result = []; let i2 = 0; function remainingPathWith(nextDef) { return nextDef.concat(drop_default(targetDef, i2 + 1)); } __name(remainingPathWith, "remainingPathWith"); function getAlternativesForProd(definition) { const alternatives = possiblePathsFrom(remainingPathWith(definition), maxLength, currPath); return result.concat(alternatives); } __name(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_default(prod.definition, (currAlt) => { if (isEmpty_default(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_default(possiblePaths)) { const currPath = possiblePaths.pop(); if (currPath === EXIT_ALTERNATIVE) { if (foundCompletePath && last_default(possiblePaths).idx <= minimalAlternativesIndex) { possiblePaths.pop(); } continue; } const currDef = currPath.def; const currIdx = currPath.idx; const currRuleStack = currPath.ruleStack; const currOccurrenceStack = currPath.occurrenceStack; if (isEmpty_default(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_default2(currRuleStack); newRuleStack.push(prod.nonTerminalName); const newOccurrenceStack = clone_default2(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_default2(currRuleStack); newRuleStack.push(topRule.name); const newCurrOccurrenceStack = clone_default2(currOccurrenceStack); newCurrOccurrenceStack.push(1); return { idx: currIdx, def: topRule.definition, ruleStack: newRuleStack, occurrenceStack: newCurrOccurrenceStack }; } var AbstractNextPossibleTokensWalker, NextAfterTokenWalker, AbstractNextTerminalAfterProductionWalker, NextTerminalAfterManyWalker, NextTerminalAfterManySepWalker, NextTerminalAfterAtLeastOneWalker, NextTerminalAfterAtLeastOneSepWalker; var init_interpreter = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/grammar/interpreter.js"() { "use strict"; init_lodash(); init_first2(); init_rest(); init_api3(); AbstractNextPossibleTokensWalker = class extends RestWalker { static { __name(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_default2(this.path.ruleStack).reverse(); this.occurrenceStack = clone_default2(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_default(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"); } 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 = first(restProd); this.found = true; } } }; AbstractNextTerminalAfterProductionWalker = class extends RestWalker { static { __name(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"); } 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"); } 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"); } 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"); } 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"); __name(nextPossibleTokensAfter, "nextPossibleTokensAfter"); __name(expandTopLevelRule, "expandTopLevelRule"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/grammar/lookahead.js 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(options3) { const { occurrence, rule, prodType, maxLookahead } = options3; 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_default(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 j2 = 0; j2 < currNumOfPaths; j2++) { const currPath = currAlt[j2]; 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_default(alts, (currAlt) => { return flatten_default(currAlt); }); const choiceToAlt = reduce_default(singleTokenAlts, (result, currAlt, idx) => { forEach_default(currAlt, (currTokType) => { if (!has_default(result, currTokType.tokenTypeIdx)) { result[currTokType.tokenTypeIdx] = idx; } forEach_default(currTokType.categoryMatches, (currExtendingType) => { if (!has_default(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 j2 = 0; j2 < currNumOfPaths; j2++) { const currPath = currAlt[j2]; 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_default(alt); if (singleTokensTypes.length === 1 && isEmpty_default(singleTokensTypes[0].categoryMatches)) { const expectedTokenType = singleTokensTypes[0]; const expectedTokenUniqueKey = expectedTokenType.tokenTypeIdx; return function() { return this.LA(1).tokenTypeIdx === expectedTokenUniqueKey; }; } else { const choiceToAlt = reduce_default(singleTokensTypes, (result, currTokType, idx) => { result[currTokType.tokenTypeIdx] = true; forEach_default(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 j2 = 0; j2 < numOfPaths; j2++) { const currPath = alt[j2]; 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(size5) { const result = new Array(size5); for (let i2 = 0; i2 < size5; 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 j2 = 0; j2 < keys3.length; j2++) { const currShorterKey = keys3[j2]; 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_default(altsDefs, (currAlt) => possiblePathsFrom([currAlt], 1)); const finalResult = initializeArrayOfArrays(partialAlts.length); const altsHashes = map_default(partialAlts, (currAltPaths) => { const dict = {}; forEach_default(currAltPaths, (item) => { const keys3 = pathToHashKeys(item.partialPath); forEach_default(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_default(suffixDef) || currPathPrefix.length === k2) { const currAltResult = finalResult[altIdx]; if (containsPath(currAltResult, currPathPrefix) === false) { currAltResult.push(currPathPrefix); for (let j2 = 0; j2 < prefixKeys.length; j2++) { const currKey = prefixKeys[j2]; altsHashes[altIdx][currKey] = true; } } } else { const newPartialPathsAndSuffixes = possiblePathsFrom(suffixDef, pathLength + 1, currPathPrefix); newData[altIdx] = newData[altIdx].concat(newPartialPathsAndSuffixes); forEach_default(newPartialPathsAndSuffixes, (item) => { const prefixKeys2 = pathToHashKeys(item.partialPath); forEach_default(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 j2 = 0; j2 < otherPath.length; j2++) { const searchTok = searchPath[j2]; const otherTok = otherPath[j2]; 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_default(token2.categoryMatches)))); } var PROD_TYPE, RestDefinitionFinderWalker, InsideDefinitionFinderVisitor; var init_lookahead = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/grammar/lookahead.js"() { "use strict"; init_lodash(); init_interpreter(); init_rest(); init_tokens(); init_api3(); (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"); __name(getLookaheadPaths, "getLookaheadPaths"); __name(buildLookaheadFuncForOr, "buildLookaheadFuncForOr"); __name(buildLookaheadFuncForOptionalProd, "buildLookaheadFuncForOptionalProd"); __name(buildAlternativesLookAheadFunc, "buildAlternativesLookAheadFunc"); __name(buildSingleAlternativeLookaheadFunction, "buildSingleAlternativeLookaheadFunction"); RestDefinitionFinderWalker = class extends RestWalker { static { __name(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"); } 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"); __name(pathToHashKeys, "pathToHashKeys"); __name(isUniquePrefixHash, "isUniquePrefixHash"); __name(lookAheadSequenceFromAlternatives, "lookAheadSequenceFromAlternatives"); __name(getLookaheadPathsForOr, "getLookaheadPathsForOr"); __name(getLookaheadPathsForOptionalProd, "getLookaheadPathsForOptionalProd"); __name(containsPath, "containsPath"); __name(isStrictPrefixOfPath, "isStrictPrefixOfPath"); __name(areTokenCategoriesNotUsed, "areTokenCategoriesNotUsed"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/grammar/checks.js function validateLookahead(options3) { const lookaheadValidationErrorMessages = options3.lookaheadStrategy.validate({ rules: options3.rules, tokenTypes: options3.tokenTypes, grammarName: options3.grammarName }); return map_default(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_default(values_default(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_default(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_default(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_default2(path4); newPath.push(currRefRule); return validateNoLeftRecursion(topRule, currRefRule, errMsgProvider, newPath); }); return errors.concat(errorsFromNextSteps); } } function getFirstNoneTerminal(definition) { let result = []; if (isEmpty_default(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_default(map_default(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_default(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_default(topLevelRules, (currTopRule) => { const collectorVisitor2 = new RepetitionCollector(); currTopRule.accept(collectorVisitor2); const allRuleProductions = collectorVisitor2.allProductions; forEach_default(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_default(flatten_default(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_default(alternatives, (result, currAlt, currAltIdx) => { if (alternation2.definition[currAltIdx].ignoreAmbiguities === true) { return result; } forEach_default(currAlt, (currPath) => { const altsCurrPathAppearsIn = [currAltIdx]; forEach_default(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_default(identicalAmbiguities, (currAmbDescriptor) => { const ambgIndices = map_default(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_default(alternatives, (result, currAlt, idx) => { const currPathsAndIdx = map_default(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_default3(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_default(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_default(tokenTypes, (currToken) => currToken.name); forEach_default(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; } var OccurrenceValidationCollector, OrCollector, RepetitionCollector; var init_checks = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/grammar/checks.js"() { "use strict"; init_lodash(); init_parser(); init_api3(); init_lookahead(); init_interpreter(); init_tokens(); __name(validateLookahead, "validateLookahead"); __name(validateGrammar, "validateGrammar"); __name(validateDuplicateProductions, "validateDuplicateProductions"); __name(identifyProductionForDuplicates, "identifyProductionForDuplicates"); __name(getExtraProductionArgument, "getExtraProductionArgument"); OccurrenceValidationCollector = class extends GAstVisitor { static { __name(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"); __name(validateRuleIsOverridden, "validateRuleIsOverridden"); __name(validateNoLeftRecursion, "validateNoLeftRecursion"); __name(getFirstNoneTerminal, "getFirstNoneTerminal"); OrCollector = class extends GAstVisitor { static { __name(this, "OrCollector"); } constructor() { super(...arguments); this.alternations = []; } visitAlternation(node2) { this.alternations.push(node2); } }; __name(validateEmptyOrAlternative, "validateEmptyOrAlternative"); __name(validateAmbiguousAlternationAlternatives, "validateAmbiguousAlternationAlternatives"); RepetitionCollector = class extends GAstVisitor { static { __name(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"); __name(validateSomeNonEmptyLookaheadPath, "validateSomeNonEmptyLookaheadPath"); __name(checkAlternativesAmbiguities, "checkAlternativesAmbiguities"); __name(checkPrefixAlternativesAmbiguities, "checkPrefixAlternativesAmbiguities"); __name(checkTerminalAndNoneTerminalsNameSpace, "checkTerminalAndNoneTerminalsNameSpace"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/grammar/gast/gast_resolver_public.js function resolveGrammar2(options3) { const actualOptions = defaults_default(options3, { errMsgProvider: defaultGrammarResolverErrorProvider }); const topRulesTable = {}; forEach_default(options3.rules, (rule) => { topRulesTable[rule.name] = rule; }); return resolveGrammar(topRulesTable, actualOptions.errMsgProvider); } function validateGrammar2(options3) { options3 = defaults_default(options3, { errMsgProvider: defaultGrammarValidatorErrorProvider }); return validateGrammar(options3.rules, options3.tokenTypes, options3.errMsgProvider, options3.grammarName); } var init_gast_resolver_public = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/grammar/gast/gast_resolver_public.js"() { "use strict"; init_lodash(); init_resolver(); init_checks(); init_errors_public(); __name(resolveGrammar2, "resolveGrammar"); __name(validateGrammar2, "validateGrammar"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/exceptions_public.js function isRecognitionException(error3) { return includes_default(RECOGNITION_EXCEPTION_NAMES, error3.name); } var MISMATCHED_TOKEN_EXCEPTION, NO_VIABLE_ALT_EXCEPTION, EARLY_EXIT_EXCEPTION, NOT_ALL_INPUT_PARSED_EXCEPTION, RECOGNITION_EXCEPTION_NAMES, RecognitionException, MismatchedTokenException, NoViableAltException, NotAllInputParsedException, EarlyExitException; var init_exceptions_public = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/exceptions_public.js"() { "use strict"; init_lodash(); 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"); RecognitionException = class extends Error { static { __name(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"); } constructor(message, token2, previousToken) { super(message, token2); this.previousToken = previousToken; this.name = MISMATCHED_TOKEN_EXCEPTION; } }; NoViableAltException = class extends RecognitionException { static { __name(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"); } constructor(message, token2) { super(message, token2); this.name = NOT_ALL_INPUT_PARSED_EXCEPTION; } }; EarlyExitException = class extends RecognitionException { static { __name(this, "EarlyExitException"); } constructor(message, token2, previousToken) { super(message, token2); this.previousToken = previousToken; this.name = EARLY_EXIT_EXCEPTION; } }; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/parser/traits/recoverable.js 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); } } var EOF_FOLLOW_KEY, IN_RULE_RECOVERY_EXCEPTION, InRuleRecoveryException, Recoverable; var init_recoverable = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/parser/traits/recoverable.js"() { "use strict"; init_tokens_public(); init_lodash(); init_exceptions_public(); init_constants2(); init_parser(); EOF_FOLLOW_KEY = {}; IN_RULE_RECOVERY_EXCEPTION = "InRuleRecoveryException"; InRuleRecoveryException = class extends Error { static { __name(this, "InRuleRecoveryException"); } constructor(message) { super(message); this.name = IN_RULE_RECOVERY_EXCEPTION; } }; Recoverable = class { static { __name(this, "Recoverable"); } initRecoverable(config6) { this.firstAfterRepMap = {}; this.resyncFollows = {}; this.recoveryEnabled = has_default(config6, "recoveryEnabled") ? config6.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__ */ __name(() => { 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_default(follows)) { return false; } const mismatchedTok = this.LA(1); const isMisMatchedTokInFollows = find_default(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_default(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_default(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_default(this.buildFullFollowKeyStack(), (currKey) => { return this.getFollowSetFromFollowKey(currKey); }); return flatten_default(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_default2(this.RULE_OCCURRENCE_STACK); const grammarPath = { ruleStack: pathRuleStack, occurrenceStack: pathOccurrenceStack, lastTok: tokType, lastTokOccurrence: tokIdxInRule }; return grammarPath; } getHumanReadableRuleStack() { return map_default(this.RULE_STACK, (currShortName) => this.shortRuleNameToFullName(currShortName)); } }; __name(attemptInRepetitionRecovery, "attemptInRepetitionRecovery"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/grammar/keys.js function getKeyForAutomaticLookahead(ruleIdx, dslMethodIdx, occurrence) { return occurrence | dslMethodIdx | ruleIdx; } var 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; var init_keys2 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/grammar/keys.js"() { "use strict"; 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"); BITS_START_FOR_ALT_IDX = 32 - BITS_FOR_ALT_IDX; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/grammar/llk_lookahead.js var LLkLookaheadStrategy; var init_llk_lookahead = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/grammar/llk_lookahead.js"() { "use strict"; init_lodash(); init_errors_public(); init_parser(); init_checks(); init_lookahead(); LLkLookaheadStrategy = class { static { __name(this, "LLkLookaheadStrategy"); } constructor(options3) { var _a; this.maxLookahead = (_a = options3 === null || options3 === void 0 ? void 0 : options3.maxLookahead) !== null && _a !== void 0 ? _a : DEFAULT_PARSER_CONFIG.maxLookahead; } validate(options3) { const leftRecursionErrors = this.validateNoLeftRecursion(options3.rules); if (isEmpty_default(leftRecursionErrors)) { const emptyAltErrors = this.validateEmptyOrAlternatives(options3.rules); const ambiguousAltsErrors = this.validateAmbiguousAlternationAlternatives(options3.rules, this.maxLookahead); const emptyRepetitionErrors = this.validateSomeNonEmptyLookaheadPath(options3.rules, this.maxLookahead); const allErrors = [ ...leftRecursionErrors, ...emptyAltErrors, ...ambiguousAltsErrors, ...emptyRepetitionErrors ]; return allErrors; } return leftRecursionErrors; } validateNoLeftRecursion(rules) { return flatMap_default(rules, (currTopRule) => validateNoLeftRecursion(currTopRule, currTopRule, defaultGrammarValidatorErrorProvider)); } validateEmptyOrAlternatives(rules) { return flatMap_default(rules, (currTopRule) => validateEmptyOrAlternative(currTopRule, defaultGrammarValidatorErrorProvider)); } validateAmbiguousAlternationAlternatives(rules, maxLookahead) { return flatMap_default(rules, (currTopRule) => validateAmbiguousAlternationAlternatives(currTopRule, maxLookahead, defaultGrammarValidatorErrorProvider)); } validateSomeNonEmptyLookaheadPath(rules, maxLookahead) { return validateSomeNonEmptyLookaheadPath(rules, maxLookahead, defaultGrammarValidatorErrorProvider); } buildLookaheadForAlternation(options3) { return buildLookaheadFuncForOr(options3.prodOccurrence, options3.rule, options3.maxLookahead, options3.hasPredicates, options3.dynamicTokensEnabled, buildAlternativesLookAheadFunc); } buildLookaheadForOptional(options3) { return buildLookaheadFuncForOptionalProd(options3.prodOccurrence, options3.rule, options3.maxLookahead, options3.dynamicTokensEnabled, getProdType(options3.prodType), buildSingleAlternativeLookaheadFunction); } }; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/parser/traits/looksahead.js function collectMethods(rule) { collectorVisitor.reset(); rule.accept(collectorVisitor); const dslMethods = collectorVisitor.dslMethods; collectorVisitor.reset(); return dslMethods; } var LooksAhead, DslMethodsCollectorVisitor, collectorVisitor; var init_looksahead = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/parser/traits/looksahead.js"() { "use strict"; init_lodash(); init_parser(); init_keys2(); init_api3(); init_llk_lookahead(); LooksAhead = class { static { __name(this, "LooksAhead"); } initLooksAhead(config6) { this.dynamicTokensEnabled = has_default(config6, "dynamicTokensEnabled") ? config6.dynamicTokensEnabled : DEFAULT_PARSER_CONFIG.dynamicTokensEnabled; this.maxLookahead = has_default(config6, "maxLookahead") ? config6.maxLookahead : DEFAULT_PARSER_CONFIG.maxLookahead; this.lookaheadStrategy = has_default(config6, "lookaheadStrategy") ? config6.lookaheadStrategy : new LLkLookaheadStrategy({ maxLookahead: this.maxLookahead }); this.lookAheadFuncsCache = /* @__PURE__ */ new Map(); } preComputeLookaheadFunctions(rules) { forEach_default(rules, (currRule) => { this.TRACE_INIT(`${currRule.name} Rule Lookahead`, () => { const { alternation: alternation2, repetition: repetition2, option: option2, repetitionMandatory: repetitionMandatory2, repetitionMandatoryWithSeparator, repetitionWithSeparator } = collectMethods(currRule); forEach_default(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_default(repetition2, (currProd) => { this.computeLookaheadFunc(currRule, currProd.idx, MANY_IDX, "Repetition", currProd.maxLookahead, getProductionDslName(currProd)); }); forEach_default(option2, (currProd) => { this.computeLookaheadFunc(currRule, currProd.idx, OPTION_IDX, "Option", currProd.maxLookahead, getProductionDslName(currProd)); }); forEach_default(repetitionMandatory2, (currProd) => { this.computeLookaheadFunc(currRule, currProd.idx, AT_LEAST_ONE_IDX, "RepetitionMandatory", currProd.maxLookahead, getProductionDslName(currProd)); }); forEach_default(repetitionMandatoryWithSeparator, (currProd) => { this.computeLookaheadFunc(currRule, currProd.idx, AT_LEAST_ONE_SEP_IDX, "RepetitionMandatoryWithSeparator", currProd.maxLookahead, getProductionDslName(currProd)); }); forEach_default(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"); } 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"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/cst/cst.js 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); } } var init_cst = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/cst/cst.js"() { "use strict"; __name(setNodeLocationOnlyOffset, "setNodeLocationOnlyOffset"); __name(setNodeLocationFull, "setNodeLocationFull"); __name(addTerminalToCst, "addTerminalToCst"); __name(addNoneTerminalToCst, "addNoneTerminalToCst"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/lang/lang_extensions.js function defineNameProp(obj, nameValue) { Object.defineProperty(obj, NAME, { enumerable: false, configurable: true, writable: false, value: nameValue }); } var NAME; var init_lang_extensions = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/lang/lang_extensions.js"() { "use strict"; NAME = "name"; __name(defineNameProp, "defineNameProp"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/cst/cst_visitor.js function defaultVisit(ctx, param) { const childrenNames = keys_default(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 j2 = 0; j2 < currChildArrayLength; j2++) { const currChild = currChildArray[j2]; if (currChild.tokenTypeIdx === void 0) { this[currChild.name](currChild.children, param); } } } } function createBaseSemanticVisitorConstructor(grammarName, ruleNames) { const derivedConstructor = /* @__PURE__ */ __name(function() { }, "derivedConstructor"); defineNameProp(derivedConstructor, grammarName + "BaseSemantics"); const semanticProto = { visit: /* @__PURE__ */ __name(function(cstNode, param) { if (isArray_default(cstNode)) { cstNode = cstNode[0]; } if (isUndefined_default(cstNode)) { return void 0; } return this[cstNode.name](cstNode.children, param); }, "visit"), validateVisitor: /* @__PURE__ */ __name(function() { const semanticDefinitionErrors = validateVisitor(this, ruleNames); if (!isEmpty_default(semanticDefinitionErrors)) { const errorMessages = map_default(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__ */ __name(function() { }, "derivedConstructor"); defineNameProp(derivedConstructor, grammarName + "BaseSemanticsWithDefaults"); const withDefaultsProto = Object.create(baseConstructor.prototype); forEach_default(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_default3(ruleNames, (currRuleName) => { return isFunction_default(visitorInstance[currRuleName]) === false; }); const errors = map_default(missingRuleNames, (currRuleName) => { return { msg: `Missing visitor method: <${currRuleName}> on ${visitorInstance.constructor.name} CST Visitor.`, type: CstVisitorDefinitionError.MISSING_METHOD, methodName: currRuleName }; }); return compact_default(errors); } var CstVisitorDefinitionError; var init_cst_visitor = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/cst/cst_visitor.js"() { "use strict"; init_lodash(); init_lang_extensions(); __name(defaultVisit, "defaultVisit"); __name(createBaseSemanticVisitorConstructor, "createBaseSemanticVisitorConstructor"); __name(createBaseVisitorConstructorWithDefaults, "createBaseVisitorConstructorWithDefaults"); (function(CstVisitorDefinitionError2) { CstVisitorDefinitionError2[CstVisitorDefinitionError2["REDUNDANT_METHOD"] = 0] = "REDUNDANT_METHOD"; CstVisitorDefinitionError2[CstVisitorDefinitionError2["MISSING_METHOD"] = 1] = "MISSING_METHOD"; })(CstVisitorDefinitionError || (CstVisitorDefinitionError = {})); __name(validateVisitor, "validateVisitor"); __name(validateMissingCstMethods, "validateMissingCstMethods"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/parser/traits/tree_builder.js var TreeBuilder; var init_tree_builder = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/parser/traits/tree_builder.js"() { "use strict"; init_cst(); init_lodash(); init_cst_visitor(); init_parser(); TreeBuilder = class { static { __name(this, "TreeBuilder"); } initTreeBuilder(config6) { this.CST_STACK = []; this.outputCst = config6.outputCst; this.nodeLocationTracking = has_default(config6, "nodeLocationTracking") ? config6.nodeLocationTracking : DEFAULT_PARSER_CONFIG.nodeLocationTracking; if (!this.outputCst) { this.cstInvocationStateUpdate = noop_default2; this.cstFinallyStateUpdate = noop_default2; this.cstPostTerminal = noop_default2; this.cstPostNonTerminal = noop_default2; this.cstPostRule = noop_default2; } else { if (/full/i.test(this.nodeLocationTracking)) { if (this.recoveryEnabled) { this.setNodeLocationFromToken = setNodeLocationFull; this.setNodeLocationFromNode = setNodeLocationFull; this.cstPostRule = noop_default2; this.setInitialNodeLocation = this.setInitialNodeLocationFullRecovery; } else { this.setNodeLocationFromToken = noop_default2; this.setNodeLocationFromNode = noop_default2; 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_default2; this.setInitialNodeLocation = this.setInitialNodeLocationOnlyOffsetRecovery; } else { this.setNodeLocationFromToken = noop_default2; this.setNodeLocationFromNode = noop_default2; this.cstPostRule = this.cstPostRuleOnlyOffset; this.setInitialNodeLocation = this.setInitialNodeLocationOnlyOffsetRegular; } } else if (/none/i.test(this.nodeLocationTracking)) { this.setNodeLocationFromToken = noop_default2; this.setNodeLocationFromNode = noop_default2; this.cstPostRule = noop_default2; this.setInitialNodeLocation = noop_default2; } else { throw Error(`Invalid config option: "${config6.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_default(this.baseCstVisitorConstructor)) { const newBaseCstVisitorConstructor = createBaseSemanticVisitorConstructor(this.className, keys_default(this.gastProductionsCache)); this.baseCstVisitorConstructor = newBaseCstVisitorConstructor; return newBaseCstVisitorConstructor; } return this.baseCstVisitorConstructor; } getBaseCstVisitorConstructorWithDefaults() { if (isUndefined_default(this.baseCstVisitorWithDefaultsConstructor)) { const newConstructor = createBaseVisitorConstructorWithDefaults(this.className, keys_default(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]; } }; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/parser/traits/lexer_adapter.js var LexerAdapter; var init_lexer_adapter = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/parser/traits/lexer_adapter.js"() { "use strict"; init_parser(); LexerAdapter = class { static { __name(this, "LexerAdapter"); } initLexerAdapter() { this.tokVector = []; this.tokVectorLength = 0; this.currIdx = -1; } set input(newInput) { if (this.selfAnalysisDone !== true) { throw Error(`Missing 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(); } }; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/parser/traits/recognizer_api.js var RecognizerApi; var init_recognizer_api = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/parser/traits/recognizer_api.js"() { "use strict"; init_lodash(); init_exceptions_public(); init_parser(); init_errors_public(); init_checks(); init_api3(); RecognizerApi = class { static { __name(this, "RecognizerApi"); } ACTION(impl2) { return impl2.call(this); } consume(idx, tokType, options3) { return this.consumeInternal(tokType, idx, options3); } subrule(idx, ruleToCall, options3) { return this.subruleInternal(ruleToCall, idx, options3); } 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, options3) { return this.consumeInternal(tokType, 0, options3); } CONSUME1(tokType, options3) { return this.consumeInternal(tokType, 1, options3); } CONSUME2(tokType, options3) { return this.consumeInternal(tokType, 2, options3); } CONSUME3(tokType, options3) { return this.consumeInternal(tokType, 3, options3); } CONSUME4(tokType, options3) { return this.consumeInternal(tokType, 4, options3); } CONSUME5(tokType, options3) { return this.consumeInternal(tokType, 5, options3); } CONSUME6(tokType, options3) { return this.consumeInternal(tokType, 6, options3); } CONSUME7(tokType, options3) { return this.consumeInternal(tokType, 7, options3); } CONSUME8(tokType, options3) { return this.consumeInternal(tokType, 8, options3); } CONSUME9(tokType, options3) { return this.consumeInternal(tokType, 9, options3); } SUBRULE(ruleToCall, options3) { return this.subruleInternal(ruleToCall, 0, options3); } SUBRULE1(ruleToCall, options3) { return this.subruleInternal(ruleToCall, 1, options3); } SUBRULE2(ruleToCall, options3) { return this.subruleInternal(ruleToCall, 2, options3); } SUBRULE3(ruleToCall, options3) { return this.subruleInternal(ruleToCall, 3, options3); } SUBRULE4(ruleToCall, options3) { return this.subruleInternal(ruleToCall, 4, options3); } SUBRULE5(ruleToCall, options3) { return this.subruleInternal(ruleToCall, 5, options3); } SUBRULE6(ruleToCall, options3) { return this.subruleInternal(ruleToCall, 6, options3); } SUBRULE7(ruleToCall, options3) { return this.subruleInternal(ruleToCall, 7, options3); } SUBRULE8(ruleToCall, options3) { return this.subruleInternal(ruleToCall, 8, options3); } SUBRULE9(ruleToCall, options3) { return this.subruleInternal(ruleToCall, 9, options3); } 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(options3) { this.manySepFirstInternal(0, options3); } MANY_SEP1(options3) { this.manySepFirstInternal(1, options3); } MANY_SEP2(options3) { this.manySepFirstInternal(2, options3); } MANY_SEP3(options3) { this.manySepFirstInternal(3, options3); } MANY_SEP4(options3) { this.manySepFirstInternal(4, options3); } MANY_SEP5(options3) { this.manySepFirstInternal(5, options3); } MANY_SEP6(options3) { this.manySepFirstInternal(6, options3); } MANY_SEP7(options3) { this.manySepFirstInternal(7, options3); } MANY_SEP8(options3) { this.manySepFirstInternal(8, options3); } MANY_SEP9(options3) { this.manySepFirstInternal(9, options3); } 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(options3) { this.atLeastOneSepFirstInternal(0, options3); } AT_LEAST_ONE_SEP1(options3) { this.atLeastOneSepFirstInternal(1, options3); } AT_LEAST_ONE_SEP2(options3) { this.atLeastOneSepFirstInternal(2, options3); } AT_LEAST_ONE_SEP3(options3) { this.atLeastOneSepFirstInternal(3, options3); } AT_LEAST_ONE_SEP4(options3) { this.atLeastOneSepFirstInternal(4, options3); } AT_LEAST_ONE_SEP5(options3) { this.atLeastOneSepFirstInternal(5, options3); } AT_LEAST_ONE_SEP6(options3) { this.atLeastOneSepFirstInternal(6, options3); } AT_LEAST_ONE_SEP7(options3) { this.atLeastOneSepFirstInternal(7, options3); } AT_LEAST_ONE_SEP8(options3) { this.atLeastOneSepFirstInternal(8, options3); } AT_LEAST_ONE_SEP9(options3) { this.atLeastOneSepFirstInternal(9, options3); } RULE(name, implementation, config6 = 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, config6); this[name] = ruleImplementation; return ruleImplementation; } OVERRIDE_RULE(name, impl2, config6 = DEFAULT_RULE_CONFIG) { const ruleErrors = validateRuleIsOverridden(name, this.definedRulesNames, this.className); this.definitionErrors = this.definitionErrors.concat(ruleErrors); const ruleImplementation = this.defineRule(name, impl2, config6); 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_default(this.gastProductionsCache)); } }; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/parser/traits/recognizer_engine.js var RecognizerEngine; var init_recognizer_engine = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/parser/traits/recognizer_engine.js"() { "use strict"; init_lodash(); init_keys2(); init_exceptions_public(); init_lookahead(); init_interpreter(); init_parser(); init_recoverable(); init_tokens_public(); init_tokens(); RecognizerEngine = class { static { __name(this, "RecognizerEngine"); } initRecognizerEngine(tokenVocabulary, config6) { 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_default(config6, "serializedGrammar")) { throw Error("The Parser's configuration can no longer contain a property.\n See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0\n For Further details."); } if (isArray_default(tokenVocabulary)) { if (isEmpty_default(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_default(tokenVocabulary)) { this.tokensMap = reduce_default(tokenVocabulary, (acc, tokType) => { acc[tokType.name] = tokType; return acc; }, {}); } else if (has_default(tokenVocabulary, "modes") && every_default(flatten_default(values_default(tokenVocabulary.modes)), isTokenType)) { const allTokenTypes2 = flatten_default(values_default(tokenVocabulary.modes)); const uniqueTokens = uniq_default(allTokenTypes2); this.tokensMap = reduce_default(uniqueTokens, (acc, tokType) => { acc[tokType.name] = tokType; return acc; }, {}); } else if (isObject_default(tokenVocabulary)) { this.tokensMap = clone_default2(tokenVocabulary); } else { throw new Error(" argument must be An Array of Token constructors, A dictionary of Token constructors or an IMultiModeLexerDefinition"); } this.tokensMap["EOF"] = EOF; const allTokenTypes = has_default(tokenVocabulary, "modes") ? flatten_default(values_default(tokenVocabulary.modes)) : values_default(tokenVocabulary); const noTokenCategoriesUsed = every_default(allTokenTypes, (tokenConstructor) => isEmpty_default(tokenConstructor.categoryMatches)); this.tokenMatcher = noTokenCategoriesUsed ? tokenStructuredMatcherNoCategories : tokenStructuredMatcher; augmentTokenTypes(values_default(this.tokensMap)); } defineRule(ruleName, impl2, config6) { 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_default(config6, "resyncEnabled") ? config6.resyncEnabled : DEFAULT_RULE_CONFIG.resyncEnabled; const recoveryValueFunc = has_default(config6, "recoveryValueFunc") ? config6.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__ */ __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(); } }, "invokeRuleWithTry"); } else { invokeRuleWithTry = /* @__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"); } 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__ */ __name(() => { 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__ */ __name(() => { 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, options3) { const laKey = this.getKeyForAutomaticLookahead(AT_LEAST_ONE_SEP_IDX, prodOccurrence); this.atLeastOneSepFirstInternalLogic(prodOccurrence, options3, laKey); } atLeastOneSepFirstInternalLogic(prodOccurrence, options3, key) { const action = options3.DEF; const separator = options3.SEP; const firstIterationLookaheadFunc = this.getLaFuncFromCache(key); if (firstIterationLookaheadFunc.call(this) === true) { action.call(this); const separatorLookAheadFunc = /* @__PURE__ */ __name(() => { 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, options3.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__ */ __name(() => { 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, options3) { const laKey = this.getKeyForAutomaticLookahead(MANY_SEP_IDX, prodOccurrence); this.manySepFirstInternalLogic(prodOccurrence, options3, laKey); } manySepFirstInternalLogic(prodOccurrence, options3, key) { const action = options3.DEF; const separator = options3.SEP; const firstIterationLaFunc = this.getLaFuncFromCache(key); if (firstIterationLaFunc.call(this) === true) { action.call(this); const separatorLookAheadFunc = /* @__PURE__ */ __name(() => { 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_default(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, options3) { let ruleResult; try { const args = options3 !== void 0 ? options3.ARGS : void 0; this.subruleIdx = idx; ruleResult = ruleToCall.apply(this, args); this.cstPostNonTerminal(ruleResult, options3 !== void 0 && options3.LABEL !== void 0 ? options3.LABEL : ruleToCall.ruleName); return ruleResult; } catch (e3) { throw this.subruleInternalError(e3, options3, ruleToCall.ruleName); } } subruleInternalError(e3, options3, ruleName) { if (isRecognitionException(e3) && e3.partialCstResult !== void 0) { this.cstPostNonTerminal(e3.partialCstResult, options3 !== void 0 && options3.LABEL !== void 0 ? options3.LABEL : ruleName); delete e3.partialCstResult; } throw e3; } consumeInternal(tokType, idx, options3) { let consumedToken; try { const nextToken = this.LA(1); if (this.tokenMatcher(nextToken, tokType) === true) { this.consumeToken(); consumedToken = nextToken; } else { this.consumeInternalError(tokType, nextToken, options3); } } catch (eFromConsumption) { consumedToken = this.consumeInternalRecovery(tokType, idx, eFromConsumption); } this.cstPostTerminal(options3 !== void 0 && options3.LABEL !== void 0 ? options3.LABEL : tokType.name, consumedToken); return consumedToken; } consumeInternalError(tokType, nextToken, options3) { let msg; const previousToken = this.LA(0); if (options3 !== void 0 && options3.ERR_MSG) { msg = options3.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_default2(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 = []; } }; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/parser/traits/error_handler.js var ErrorHandler; var init_error_handler = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/parser/traits/error_handler.js"() { "use strict"; init_exceptions_public(); init_lodash(); init_lookahead(); init_parser(); ErrorHandler = class { static { __name(this, "ErrorHandler"); } initErrorHandler(config6) { this._errors = []; this.errorMessageProvider = has_default(config6, "errorMessageProvider") ? config6.errorMessageProvider : DEFAULT_PARSER_CONFIG.errorMessageProvider; } SAVE_ERROR(error3) { if (isRecognitionException(error3)) { error3.context = { ruleStack: this.getHumanReadableRuleStack(), ruleOccurrenceStack: clone_default2(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_default2(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)); } }; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/parser/traits/context_assist.js var ContentAssist; var init_context_assist = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/parser/traits/context_assist.js"() { "use strict"; init_interpreter(); init_lodash(); ContentAssist = class { static { __name(this, "ContentAssist"); } initContentAssist() { } computeContentAssist(startRuleName, precedingInput) { const startRuleGast = this.gastProductionsCache[startRuleName]; if (isUndefined_default(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; } }; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/parser/traits/gast_recorder.js function recordProd(prodConstructor, mainProdArg, occurrence, handleSep = false) { assertMethodIdxIsValid(occurrence); const prevProd = last_default(this.recordingProdStack); const grammarAction = isFunction_default(mainProdArg) ? mainProdArg : mainProdArg.DEF; const newProd = new prodConstructor({ definition: [], idx: occurrence }); if (handleSep) { newProd.separator = mainProdArg.SEP; } if (has_default(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_default(this.recordingProdStack); const hasOptions = isArray_default(mainProdArg) === false; const alts = hasOptions === false ? mainProdArg : mainProdArg.DEF; const newOrProd = new Alternation({ definition: [], idx: occurrence, ignoreAmbiguities: hasOptions && mainProdArg.IGNORE_AMBIGUITIES === true }); if (has_default(mainProdArg, "MAX_LOOKAHEAD")) { newOrProd.maxLookahead = mainProdArg.MAX_LOOKAHEAD; } const hasPredicates = some_default(alts, (currAlt) => isFunction_default(currAlt.GATE)); newOrProd.hasPredicates = hasPredicates; prevProd.definition.push(newOrProd); forEach_default(alts, (currAlt) => { const currAltFlat = new Alternative({ definition: [] }); newOrProd.definition.push(currAltFlat); if (has_default(currAlt, "IGNORE_AMBIGUITIES")) { currAltFlat.ignoreAmbiguities = currAlt.IGNORE_AMBIGUITIES; } else if (has_default(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; } } var RECORDING_NULL_OBJECT, HANDLE_SEPARATOR, MAX_METHOD_IDX, RFT, RECORDING_PHASE_TOKEN, RECORDING_PHASE_CSTNODE, GastRecorder; var init_gast_recorder = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/parser/traits/gast_recorder.js"() { "use strict"; init_lodash(); init_api3(); init_lexer_public(); init_tokens(); init_tokens_public(); init_parser(); init_keys2(); 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"); } initGastRecorder(config6) { 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, def2) { try { const newTopLevelRule = new Rule({ definition: [], name }); newTopLevelRule.name = name; this.recordingProdStack.push(newTopLevelRule); def2.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, options3) { recordProd.call(this, RepetitionMandatoryWithSeparator, options3, occurrence, HANDLE_SEPARATOR); } manyInternalRecord(occurrence, actionORMethodDef) { recordProd.call(this, Repetition, actionORMethodDef, occurrence); } manySepFirstInternalRecord(occurrence, options3) { recordProd.call(this, RepetitionWithSeparator, options3, occurrence, HANDLE_SEPARATOR); } orInternalRecord(altsOrOpts, occurrence) { return recordOrProd.call(this, altsOrOpts, occurrence); } subruleInternalRecord(ruleToCall, occurrence, options3) { assertMethodIdxIsValid(occurrence); if (!ruleToCall || has_default(ruleToCall, "ruleName") === false) { const error3 = new Error(` 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_default(this.recordingProdStack); const ruleName = ruleToCall.ruleName; const newNoneTerminal = new NonTerminal({ idx: occurrence, nonTerminalName: ruleName, label: options3 === null || options3 === void 0 ? void 0 : options3.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, options3) { assertMethodIdxIsValid(occurrence); if (!hasShortKeyProperty(tokType)) { const error3 = new Error(` 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_default(this.recordingProdStack); const newNoneTerminal = new Terminal({ idx: occurrence, terminalType: tokType, label: options3 === null || options3 === void 0 ? void 0 : options3.LABEL }); prevProd.definition.push(newNoneTerminal); return RECORDING_PHASE_TOKEN; } }; __name(recordProd, "recordProd"); __name(recordOrProd, "recordOrProd"); __name(getIdxSuffix, "getIdxSuffix"); __name(assertMethodIdxIsValid, "assertMethodIdxIsValid"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/parser/traits/perf_tracer.js var PerformanceTracer; var init_perf_tracer = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/parser/traits/perf_tracer.js"() { "use strict"; init_lodash(); init_api2(); init_parser(); PerformanceTracer = class { static { __name(this, "PerformanceTracer"); } initPerformanceTracer(config6) { if (has_default(config6, "traceInitPerf")) { const userTraceInitPerf = config6.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(); } } }; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/parser/utils/apply_mixins.js 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]; } }); }); } var init_apply_mixins = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/parser/utils/apply_mixins.js"() { "use strict"; __name(applyMixins, "applyMixins"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/parser/parser.js function EMPTY_ALT(value2 = void 0) { return function() { return value2; }; } var END_OF_FILE, DEFAULT_PARSER_CONFIG, DEFAULT_RULE_CONFIG, ParserDefinitionErrorType, Parser2, EmbeddedActionsParser; var init_parser = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/parse/parser/parser.js"() { "use strict"; init_lodash(); init_api2(); init_follow(); init_tokens_public(); init_errors_public(); init_gast_resolver_public(); init_recoverable(); init_looksahead(); init_tree_builder(); init_lexer_adapter(); init_recognizer_api(); init_recognizer_engine(); init_error_handler(); init_context_assist(); init_gast_recorder(); init_perf_tracer(); init_apply_mixins(); init_checks(); 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__ */ __name(() => 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"); Parser2 = class _Parser2 { static { __name(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_default(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_default(this.gastProductionsCache) }); this.definitionErrors = this.definitionErrors.concat(resolverErrors); }); this.TRACE_INIT("Grammar Validations", () => { if (isEmpty_default(resolverErrors) && this.skipValidations === false) { const validationErrors = validateGrammar2({ rules: values_default(this.gastProductionsCache), tokenTypes: values_default(this.tokensMap), errMsgProvider: defaultGrammarValidatorErrorProvider, grammarName: className }); const lookaheadValidationErrors = validateLookahead({ lookaheadStrategy: this.lookaheadStrategy, rules: values_default(this.gastProductionsCache), tokenTypes: values_default(this.tokensMap), grammarName: className }); this.definitionErrors = this.definitionErrors.concat(validationErrors, lookaheadValidationErrors); } }); if (isEmpty_default(this.definitionErrors)) { if (this.recoveryEnabled) { this.TRACE_INIT("computeAllProdsFollows", () => { const allFollows = computeAllProdsFollows(values_default(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_default(this.gastProductionsCache) }); this.preComputeLookaheadFunctions(values_default(this.gastProductionsCache)); }); } if (!_Parser2.DEFER_DEFINITION_ERRORS_HANDLING && !isEmpty_default(this.definitionErrors)) { defErrorsMsgs = map_default(this.definitionErrors, (defError) => defError.message); throw new Error(`Parser Definition Errors detected: ${defErrorsMsgs.join("\n-------------------------------\n")}`); } }); } constructor(tokenVocabulary, config6) { this.definitionErrors = []; this.selfAnalysisDone = false; const that = this; that.initErrorHandler(config6); that.initLexerAdapter(); that.initLooksAhead(config6); that.initRecognizerEngine(tokenVocabulary, config6); that.initRecoverable(config6); that.initTreeBuilder(config6); that.initContentAssist(); that.initGastRecorder(config6); that.initPerformanceTracer(config6); if (has_default(config6, "ignoredIssues")) { throw new Error("The IParserConfig property has been deprecated.\n Please use the 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_default(config6, "skipValidations") ? config6.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"); } constructor(tokenVocabulary, config6 = DEFAULT_PARSER_CONFIG) { const configClone = clone_default2(config6); configClone.outputCst = false; super(tokenVocabulary, configClone); } }; } }); // ../../node_modules/.pnpm/@[email protected]/node_modules/@chevrotain/cst-dts-gen/lib/src/model.js var init_model2 = __esm({ "../../node_modules/.pnpm/@[email protected]/node_modules/@chevrotain/cst-dts-gen/lib/src/model.js"() { "use strict"; init_api3(); } }); // ../../node_modules/.pnpm/@[email protected]/node_modules/@chevrotain/cst-dts-gen/lib/src/generate.js var init_generate = __esm({ "../../node_modules/.pnpm/@[email protected]/node_modules/@chevrotain/cst-dts-gen/lib/src/generate.js"() { "use strict"; } }); // ../../node_modules/.pnpm/@[email protected]/node_modules/@chevrotain/cst-dts-gen/lib/src/api.js var init_api4 = __esm({ "../../node_modules/.pnpm/@[email protected]/node_modules/@chevrotain/cst-dts-gen/lib/src/api.js"() { "use strict"; init_model2(); init_generate(); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/diagrams/render_public.js var init_render_public = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/diagrams/render_public.js"() { "use strict"; init_version(); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/api.js var init_api5 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/chevrotain/lib/src/api.js"() { "use strict"; init_version(); init_parser(); init_lexer_public(); init_tokens_public(); init_lookahead(); init_llk_lookahead(); init_errors_public(); init_exceptions_public(); init_lexer_errors_public(); init_api3(); init_api3(); init_api4(); init_render_public(); } }); // ../../node_modules/.pnpm/[email protected][email protected]/node_modules/chevrotain-allstar/lib/atn.js function buildATNKey(rule, type3, occurrence) { return `${rule.name}_${type3}_${occurrence}`; } function createATN(rules) { const atn = { decisionMap: {}, decisionStates: [], ruleToStartState: /* @__PURE__ */ new Map(), ruleToStopState: /* @__PURE__ */ new Map(), states: [] }; createRuleStartAndStopATNStates(atn, rules); const ruleLength = rules.length; for (let i2 = 0; i2 < ruleLength; i2++) { const rule = rules[i2]; const ruleBlock = block2(atn, rule, rule); if (ruleBlock === void 0) { continue; } buildRuleHandle(atn, rule, ruleBlock); } return atn; } function createRuleStartAndStopATNStates(atn, rules) { const ruleLength = rules.length; for (let i2 = 0; i2 < ruleLength; i2++) { const rule = rules[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 block2(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, block2(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, block2(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, block2(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, block2(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_default(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, block2(atn, rule, option2)); return optional(atn, rule, option2, handle); } function block2(atn, rule, block3) { const handles = filter_default3(map_default(block3.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, state5) { atn.decisionStates.push(state5); state5.decision = atn.decisionStates.length - 1; return state5.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 first3 = alts[0]; const last3 = alts[altsLength - 1]; return { left: first3.left, right: last3.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, block3) { const start3 = atn.ruleToStartState.get(rule); epsilon4(start3, block3.left); const stop5 = atn.ruleToStopState.get(rule); epsilon4(block3.right, stop5); const handle = { left: start3, right: stop5 }; return handle; } function epsilon4(a2, b2) { const transition2 = new EpsilonTransition(b2); 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(state5, transition2) { if (state5.transitions.length === 0) { state5.epsilonOnlyTransitions = transition2.isEpsilon(); } state5.transitions.push(transition2); } function removeState(atn, state5) { atn.states.splice(atn.states.indexOf(state5), 1); } var 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; var init_atn = __esm({ "../../node_modules/.pnpm/[email protected][email protected]/node_modules/chevrotain-allstar/lib/atn.js"() { "use strict"; init_map(); init_filter3(); init_api5(); __name(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"); } constructor(target) { this.target = target; } isEpsilon() { return false; } }; AtomTransition = class extends AbstractTransition { static { __name(this, "AtomTransition"); } constructor(target, tokenType) { super(target); this.tokenType = tokenType; } }; EpsilonTransition = class extends AbstractTransition { static { __name(this, "EpsilonTransition"); } constructor(target) { super(target); } isEpsilon() { return true; } }; RuleTransition = class extends AbstractTransition { static { __name(this, "RuleTransition"); } constructor(ruleStart, rule, followState) { super(ruleStart); this.rule = rule; this.followState = followState; } isEpsilon() { return true; } }; __name(createATN, "createATN"); __name(createRuleStartAndStopATNStates, "createRuleStartAndStopATNStates"); __name(atom, "atom"); __name(repetition, "repetition"); __name(repetitionSep, "repetitionSep"); __name(repetitionMandatory, "repetitionMandatory"); __name(repetitionMandatorySep, "repetitionMandatorySep"); __name(alternation, "alternation"); __name(option, "option"); __name(block2, "block"); __name(plus, "plus"); __name(star, "star"); __name(optional, "optional"); __name(defineDecisionState, "defineDecisionState"); __name(makeAlts, "makeAlts"); __name(getProdType2, "getProdType"); __name(makeBlock, "makeBlock"); __name(tokenRef, "tokenRef"); __name(ruleRef, "ruleRef"); __name(buildRuleHandle, "buildRuleHandle"); __name(epsilon4, "epsilon"); __name(newState, "newState"); __name(addTransition, "addTransition"); __name(removeState, "removeState"); } }); // ../../node_modules/.pnpm/[email protected][email protected]/node_modules/chevrotain-allstar/lib/dfa.js function getATNConfigKey(config6, alt = true) { return `${alt ? `a${config6.alt}` : ""}s${config6.state.stateNumber}:${config6.stack.map((e3) => e3.stateNumber.toString()).join("_")}`; } var DFA_ERROR, ATNConfigSet; var init_dfa = __esm({ "../../node_modules/.pnpm/[email protected][email protected]/node_modules/chevrotain-allstar/lib/dfa.js"() { "use strict"; init_map(); DFA_ERROR = {}; ATNConfigSet = class { static { __name(this, "ATNConfigSet"); } constructor() { this.map = {}; this.configs = []; } get size() { return this.configs.length; } finalize() { this.map = {}; } add(config6) { const key = getATNConfigKey(config6); if (!(key in this.map)) { this.map[key] = this.configs.length; this.configs.push(config6); } } get elements() { return this.configs; } get alts() { return map_default(this.configs, (e3) => e3.alt); } get key() { let value2 = ""; for (const k2 in this.map) { value2 += k2 + ":"; } return value2; } }; __name(getATNConfigKey, "getATNConfigKey"); } }); // ../../node_modules/.pnpm/[email protected][email protected]/node_modules/chevrotain-allstar/lib/all-star-lookahead.js function createDFACache(startState, decision) { const map5 = {}; return (predicateSet) => { const key = predicateSet.toString(); let existing = map5[key]; if (existing !== void 0) { return existing; } else { existing = { atnStartState: startState, decision, states: {} }; map5[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 d2 = getExistingTargetState(previousD, t4); if (d2 === void 0) { d2 = computeLookaheadTarget.apply(this, [dfa, previousD, t4, i2, predicateSet, logging]); } if (d2 === DFA_ERROR) { return buildAdaptivePredictError(path4, previousD, t4); } if (d2.isAcceptState === true) { return d2.prediction; } previousD = d2; 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_default(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(options3) { const pathMsg = map_default(options3.prefixPath, (currtok) => tokenLabel2(currtok)).join(", "); const occurrence = options3.production.idx === 0 ? "" : options3.production.idx; let currMessage = `Ambiguous Alternatives Detected: <${options3.ambiguityIndices.join(", ")}> in <${getProductionDslName2(options3.production)}${occurrence}> inside <${options3.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_default(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(state5, token2) { return state5.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, state5) { if (state5 === DFA_ERROR) { return state5; } const mapKey = state5.configs.key; const existing = dfa.states[mapKey]; if (existing !== void 0) { return existing; } state5.configs.finalize(); dfa.states[mapKey] = state5; return state5; } 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 config6 = { state: target, alt: i2, stack: [] }; closure(config6, configs); } return configs; } function closure(config6, configs) { const p3 = config6.state; if (p3.type === ATN_RULE_STOP) { if (config6.stack.length > 0) { const atnStack = [...config6.stack]; const followState = atnStack.pop(); const followConfig = { state: followState, alt: config6.alt, stack: atnStack }; closure(followConfig, configs); } else { configs.add(config6); } return; } if (!p3.epsilonOnlyTransitions) { configs.add(config6); } const transitionLength = p3.transitions.length; for (let i2 = 0; i2 < transitionLength; i2++) { const transition2 = p3.transitions[i2]; const c3 = getEpsilonTarget(config6, transition2); if (c3 !== void 0) { closure(c3, configs); } } } function getEpsilonTarget(config6, transition2) { if (transition2 instanceof EpsilonTransition) { return { state: transition2.target, alt: config6.alt, stack: config6.stack }; } else if (transition2 instanceof RuleTransition) { const stack = [...config6.stack, transition2.followState]; return { state: transition2.target, alt: config6.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; } var PredicateSet, EMPTY_PREDICATES, LLStarLookaheadStrategy; var init_all_star_lookahead = __esm({ "../../node_modules/.pnpm/[email protected][email protected]/node_modules/chevrotain-allstar/lib/all-star-lookahead.js"() { "use strict"; init_api5(); init_atn(); init_dfa(); init_min2(); init_flatMap(); init_uniqBy(); init_map(); init_flatten(); init_forEach(); init_isEmpty(); init_reduce(); __name(createDFACache, "createDFACache"); PredicateSet = class { static { __name(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 size5 = this.predicates.length; for (let i2 = 0; i2 < size5; i2++) { value2 += this.predicates[i2] === true ? "1" : "0"; } return value2; } }; EMPTY_PREDICATES = new PredicateSet(); LLStarLookaheadStrategy = class extends LLkLookaheadStrategy { static { __name(this, "LLStarLookaheadStrategy"); } constructor(options3) { var _a; super(); this.logging = (_a = options3 === null || options3 === void 0 ? void 0 : options3.logging) !== null && _a !== void 0 ? _a : (message) => console.log(message); } initialize(options3) { this.atn = createATN(options3.rules); this.dfas = initATNSimulator(this.atn); } validateAmbiguousAlternationAlternatives() { return []; } validateEmptyOrAlternatives() { return []; } buildLookaheadForAlternation(options3) { const { prodOccurrence, rule, hasPredicates, dynamicTokensEnabled } = options3; 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_default(getLookaheadPaths({ maxLookahead: 1, occurrence: prodOccurrence, prodType: "Alternation", rule }), (currAlt) => map_default(currAlt, (path4) => path4[0])); if (isLL1Sequence(partialAlts, false) && !dynamicTokensEnabled) { const choiceToAlt = reduce_default(partialAlts, (result, currAlt, idx) => { forEach_default(currAlt, (currTokType) => { if (currTokType) { result[currTokType.tokenTypeIdx] = idx; forEach_default(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(options3) { const { prodOccurrence, rule, prodType, dynamicTokensEnabled } = options3; 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_default(getLookaheadPaths({ maxLookahead: 1, occurrence: prodOccurrence, prodType, rule }), (e3) => { return map_default(e3, (g2) => g2[0]); }); if (isLL1Sequence(alts) && alts[0][0] && !dynamicTokensEnabled) { const alt = alts[0]; const singleTokensTypes = flatten_default(alt); if (singleTokensTypes.length === 1 && isEmpty_default(singleTokensTypes[0].categoryMatches)) { const expectedTokenType = singleTokensTypes[0]; const expectedTokenUniqueKey = expectedTokenType.tokenTypeIdx; return function() { return this.LA(1).tokenTypeIdx === expectedTokenUniqueKey; }; } else { const choiceToAlt = reduce_default(singleTokensTypes, (result, currTokType) => { if (currTokType !== void 0) { result[currTokType.tokenTypeIdx] = true; forEach_default(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"); __name(initATNSimulator, "initATNSimulator"); __name(adaptivePredict, "adaptivePredict"); __name(performLookahead, "performLookahead"); __name(computeLookaheadTarget, "computeLookaheadTarget"); __name(reportLookaheadAmbiguity, "reportLookaheadAmbiguity"); __name(buildAmbiguityError, "buildAmbiguityError"); __name(getProductionDslName2, "getProductionDslName"); __name(buildAdaptivePredictError, "buildAdaptivePredictError"); __name(getExistingTargetState, "getExistingTargetState"); __name(computeReachSet, "computeReachSet"); __name(getReachableTarget, "getReachableTarget"); __name(getUniqueAlt, "getUniqueAlt"); __name(newDFAState, "newDFAState"); __name(addDFAEdge, "addDFAEdge"); __name(addDFAState, "addDFAState"); __name(computeStartState, "computeStartState"); __name(closure, "closure"); __name(getEpsilonTarget, "getEpsilonTarget"); __name(hasConfigInRuleStopState, "hasConfigInRuleStopState"); __name(allConfigsInRuleStopStates, "allConfigsInRuleStopStates"); __name(hasConflictTerminatingPrediction, "hasConflictTerminatingPrediction"); __name(getConflictingAltSets, "getConflictingAltSets"); __name(hasConflictingAltSet, "hasConflictingAltSet"); __name(hasStateAssociatedWithOneAlt, "hasStateAssociatedWithOneAlt"); } }); // ../../node_modules/.pnpm/[email protected][email protected]/node_modules/chevrotain-allstar/lib/index.js var init_lib2 = __esm({ "../../node_modules/.pnpm/[email protected][email protected]/node_modules/chevrotain-allstar/lib/index.js"() { "use strict"; init_all_star_lookahead(); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/vscode-languageserver-types/lib/esm/main.js var DocumentUri, URI, integer, 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, 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, TextDocument, FullTextDocument, Is; var init_main = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/vscode-languageserver-types/lib/esm/main.js"() { "use strict"; (function(DocumentUri2) { function is2(value2) { return typeof value2 === "string"; } __name(is2, "is"); DocumentUri2.is = is2; })(DocumentUri || (DocumentUri = {})); (function(URI3) { function is2(value2) { return typeof value2 === "string"; } __name(is2, "is"); URI3.is = is2; })(URI || (URI = {})); (function(integer4) { integer4.MIN_VALUE = -2147483648; integer4.MAX_VALUE = 2147483647; function is2(value2) { return typeof value2 === "number" && integer4.MIN_VALUE <= value2 && value2 <= integer4.MAX_VALUE; } __name(is2, "is"); integer4.is = is2; })(integer || (integer = {})); (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"); uinteger2.is = is2; })(uinteger || (uinteger = {})); (function(Position2) { function create2(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(create2, "create"); Position2.create = create2; function is2(value2) { let candidate = value2; return Is.objectLiteral(candidate) && Is.uinteger(candidate.line) && Is.uinteger(candidate.character); } __name(is2, "is"); Position2.is = is2; })(Position || (Position = {})); (function(Range2) { function create2(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(create2, "create"); Range2.create = create2; function is2(value2) { let candidate = value2; return Is.objectLiteral(candidate) && Position.is(candidate.start) && Position.is(candidate.end); } __name(is2, "is"); Range2.is = is2; })(Range || (Range = {})); (function(Location2) { function create2(uri, range3) { return { uri, range: range3 }; } __name(create2, "create"); Location2.create = create2; 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"); Location2.is = is2; })(Location || (Location = {})); (function(LocationLink2) { function create2(targetUri, targetRange, targetSelectionRange, originSelectionRange) { return { targetUri, targetRange, targetSelectionRange, originSelectionRange }; } __name(create2, "create"); LocationLink2.create = create2; 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"); LocationLink2.is = is2; })(LocationLink || (LocationLink = {})); (function(Color4) { function create2(red, green, blue, alpha) { return { red, green, blue, alpha }; } __name(create2, "create"); Color4.create = create2; 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"); Color4.is = is2; })(Color3 || (Color3 = {})); (function(ColorInformation2) { function create2(range3, color2) { return { range: range3, color: color2 }; } __name(create2, "create"); ColorInformation2.create = create2; function is2(value2) { const candidate = value2; return Is.objectLiteral(candidate) && Range.is(candidate.range) && Color3.is(candidate.color); } __name(is2, "is"); ColorInformation2.is = is2; })(ColorInformation || (ColorInformation = {})); (function(ColorPresentation2) { function create2(label, textEdit, additionalTextEdits) { return { label, textEdit, additionalTextEdits }; } __name(create2, "create"); ColorPresentation2.create = create2; 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"); ColorPresentation2.is = is2; })(ColorPresentation || (ColorPresentation = {})); (function(FoldingRangeKind2) { FoldingRangeKind2.Comment = "comment"; FoldingRangeKind2.Imports = "imports"; FoldingRangeKind2.Region = "region"; })(FoldingRangeKind || (FoldingRangeKind = {})); (function(FoldingRange2) { function create2(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(create2, "create"); FoldingRange2.create = create2; 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"); FoldingRange2.is = is2; })(FoldingRange || (FoldingRange = {})); (function(DiagnosticRelatedInformation2) { function create2(location, message) { return { location, message }; } __name(create2, "create"); DiagnosticRelatedInformation2.create = create2; function is2(value2) { let candidate = value2; return Is.defined(candidate) && Location.is(candidate.location) && Is.string(candidate.message); } __name(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"); CodeDescription2.is = is2; })(CodeDescription || (CodeDescription = {})); (function(Diagnostic2) { function create2(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(create2, "create"); Diagnostic2.create = create2; 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"); Diagnostic2.is = is2; })(Diagnostic || (Diagnostic = {})); (function(Command2) { function create2(title2, command, ...args) { let result = { title: title2, command }; if (Is.defined(args) && args.length > 0) { result.arguments = args; } return result; } __name(create2, "create"); Command2.create = create2; function is2(value2) { let candidate = value2; return Is.defined(candidate) && Is.string(candidate.title) && Is.string(candidate.command); } __name(is2, "is"); Command2.is = is2; })(Command || (Command = {})); (function(TextEdit2) { function replace2(range3, newText) { return { range: range3, newText }; } __name(replace2, "replace"); TextEdit2.replace = replace2; function insert(position5, newText) { return { range: { start: position5, end: position5 }, newText }; } __name(insert, "insert"); TextEdit2.insert = insert; function del(range3) { return { range: range3, newText: "" }; } __name(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"); TextEdit2.is = is2; })(TextEdit || (TextEdit = {})); (function(ChangeAnnotation2) { function create2(label, needsConfirmation, description) { const result = { label }; if (needsConfirmation !== void 0) { result.needsConfirmation = needsConfirmation; } if (description !== void 0) { result.description = description; } return result; } __name(create2, "create"); ChangeAnnotation2.create = create2; 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"); ChangeAnnotation2.is = is2; })(ChangeAnnotation || (ChangeAnnotation = {})); (function(ChangeAnnotationIdentifier2) { function is2(value2) { const candidate = value2; return Is.string(candidate); } __name(is2, "is"); ChangeAnnotationIdentifier2.is = is2; })(ChangeAnnotationIdentifier || (ChangeAnnotationIdentifier = {})); (function(AnnotatedTextEdit2) { function replace2(range3, newText, annotation) { return { range: range3, newText, annotationId: annotation }; } __name(replace2, "replace"); AnnotatedTextEdit2.replace = replace2; function insert(position5, newText, annotation) { return { range: { start: position5, end: position5 }, newText, annotationId: annotation }; } __name(insert, "insert"); AnnotatedTextEdit2.insert = insert; function del(range3, annotation) { return { range: range3, newText: "", annotationId: annotation }; } __name(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"); AnnotatedTextEdit2.is = is2; })(AnnotatedTextEdit || (AnnotatedTextEdit = {})); (function(TextDocumentEdit2) { function create2(textDocument, edits) { return { textDocument, edits }; } __name(create2, "create"); TextDocumentEdit2.create = create2; function is2(value2) { let candidate = value2; return Is.defined(candidate) && OptionalVersionedTextDocumentIdentifier.is(candidate.textDocument) && Array.isArray(candidate.edits); } __name(is2, "is"); TextDocumentEdit2.is = is2; })(TextDocumentEdit || (TextDocumentEdit = {})); (function(CreateFile2) { function create2(uri, options3, annotation) { let result = { kind: "create", uri }; if (options3 !== void 0 && (options3.overwrite !== void 0 || options3.ignoreIfExists !== void 0)) { result.options = options3; } if (annotation !== void 0) { result.annotationId = annotation; } return result; } __name(create2, "create"); CreateFile2.create = create2; 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"); CreateFile2.is = is2; })(CreateFile || (CreateFile = {})); (function(RenameFile2) { function create2(oldUri, newUri, options3, annotation) { let result = { kind: "rename", oldUri, newUri }; if (options3 !== void 0 && (options3.overwrite !== void 0 || options3.ignoreIfExists !== void 0)) { result.options = options3; } if (annotation !== void 0) { result.annotationId = annotation; } return result; } __name(create2, "create"); RenameFile2.create = create2; 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"); RenameFile2.is = is2; })(RenameFile || (RenameFile = {})); (function(DeleteFile2) { function create2(uri, options3, annotation) { let result = { kind: "delete", uri }; if (options3 !== void 0 && (options3.recursive !== void 0 || options3.ignoreIfNotExists !== void 0)) { result.options = options3; } if (annotation !== void 0) { result.annotationId = annotation; } return result; } __name(create2, "create"); DeleteFile2.create = create2; 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"); 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"); WorkspaceEdit2.is = is2; })(WorkspaceEdit || (WorkspaceEdit = {})); (function(TextDocumentIdentifier2) { function create2(uri) { return { uri }; } __name(create2, "create"); TextDocumentIdentifier2.create = create2; function is2(value2) { let candidate = value2; return Is.defined(candidate) && Is.string(candidate.uri); } __name(is2, "is"); TextDocumentIdentifier2.is = is2; })(TextDocumentIdentifier || (TextDocumentIdentifier = {})); (function(VersionedTextDocumentIdentifier2) { function create2(uri, version4) { return { uri, version: version4 }; } __name(create2, "create"); VersionedTextDocumentIdentifier2.create = create2; function is2(value2) { let candidate = value2; return Is.defined(candidate) && Is.string(candidate.uri) && Is.integer(candidate.version); } __name(is2, "is"); VersionedTextDocumentIdentifier2.is = is2; })(VersionedTextDocumentIdentifier || (VersionedTextDocumentIdentifier = {})); (function(OptionalVersionedTextDocumentIdentifier2) { function create2(uri, version4) { return { uri, version: version4 }; } __name(create2, "create"); OptionalVersionedTextDocumentIdentifier2.create = create2; function is2(value2) { let candidate = value2; return Is.defined(candidate) && Is.string(candidate.uri) && (candidate.version === null || Is.integer(candidate.version)); } __name(is2, "is"); OptionalVersionedTextDocumentIdentifier2.is = is2; })(OptionalVersionedTextDocumentIdentifier || (OptionalVersionedTextDocumentIdentifier = {})); (function(TextDocumentItem2) { function create2(uri, languageId, version4, text3) { return { uri, languageId, version: version4, text: text3 }; } __name(create2, "create"); TextDocumentItem2.create = create2; 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"); 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"); 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"); 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 create2(newText, insert, replace2) { return { newText, insert, replace: replace2 }; } __name(create2, "create"); InsertReplaceEdit2.create = create2; function is2(value2) { const candidate = value2; return candidate && Is.string(candidate.newText) && Range.is(candidate.insert) && Range.is(candidate.replace); } __name(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"); CompletionItemLabelDetails2.is = is2; })(CompletionItemLabelDetails || (CompletionItemLabelDetails = {})); (function(CompletionItem2) { function create2(label) { return { label }; } __name(create2, "create"); CompletionItem2.create = create2; })(CompletionItem || (CompletionItem = {})); (function(CompletionList2) { function create2(items, isIncomplete) { return { items: items ? items : [], isIncomplete: !!isIncomplete }; } __name(create2, "create"); CompletionList2.create = create2; })(CompletionList || (CompletionList = {})); (function(MarkedString2) { function fromPlainText(plainText) { return plainText.replace(/[\\`*_{}[\]()#+\-.!]/g, "\\$&"); } __name(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"); 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"); Hover2.is = is2; })(Hover || (Hover = {})); (function(ParameterInformation2) { function create2(label, documentation) { return documentation ? { label, documentation } : { label }; } __name(create2, "create"); ParameterInformation2.create = create2; })(ParameterInformation || (ParameterInformation = {})); (function(SignatureInformation2) { function create2(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(create2, "create"); SignatureInformation2.create = create2; })(SignatureInformation || (SignatureInformation = {})); (function(DocumentHighlightKind2) { DocumentHighlightKind2.Text = 1; DocumentHighlightKind2.Read = 2; DocumentHighlightKind2.Write = 3; })(DocumentHighlightKind || (DocumentHighlightKind = {})); (function(DocumentHighlight2) { function create2(range3, kind) { let result = { range: range3 }; if (Is.number(kind)) { result.kind = kind; } return result; } __name(create2, "create"); DocumentHighlight2.create = create2; })(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 create2(name, kind, range3, uri, containerName) { let result = { name, kind, location: { uri, range: range3 } }; if (containerName) { result.containerName = containerName; } return result; } __name(create2, "create"); SymbolInformation2.create = create2; })(SymbolInformation || (SymbolInformation = {})); (function(WorkspaceSymbol2) { function create2(name, kind, uri, range3) { return range3 !== void 0 ? { name, kind, location: { uri, range: range3 } } : { name, kind, location: { uri } }; } __name(create2, "create"); WorkspaceSymbol2.create = create2; })(WorkspaceSymbol || (WorkspaceSymbol = {})); (function(DocumentSymbol2) { function create2(name, detail, kind, range3, selectionRange, children2) { let result = { name, detail, kind, range: range3, selectionRange }; if (children2 !== void 0) { result.children = children2; } return result; } __name(create2, "create"); DocumentSymbol2.create = create2; 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"); 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 create2(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(create2, "create"); CodeActionContext2.create = create2; 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"); CodeActionContext2.is = is2; })(CodeActionContext || (CodeActionContext = {})); (function(CodeAction2) { function create2(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(create2, "create"); CodeAction2.create = create2; 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"); CodeAction2.is = is2; })(CodeAction || (CodeAction = {})); (function(CodeLens2) { function create2(range3, data5) { let result = { range: range3 }; if (Is.defined(data5)) { result.data = data5; } return result; } __name(create2, "create"); CodeLens2.create = create2; 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"); CodeLens2.is = is2; })(CodeLens || (CodeLens = {})); (function(FormattingOptions2) { function create2(tabSize, insertSpaces) { return { tabSize, insertSpaces }; } __name(create2, "create"); FormattingOptions2.create = create2; function is2(value2) { let candidate = value2; return Is.defined(candidate) && Is.uinteger(candidate.tabSize) && Is.boolean(candidate.insertSpaces); } __name(is2, "is"); FormattingOptions2.is = is2; })(FormattingOptions || (FormattingOptions = {})); (function(DocumentLink2) { function create2(range3, target, data5) { return { range: range3, target, data: data5 }; } __name(create2, "create"); DocumentLink2.create = create2; 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"); DocumentLink2.is = is2; })(DocumentLink || (DocumentLink = {})); (function(SelectionRange2) { function create2(range3, parent4) { return { range: range3, parent: parent4 }; } __name(create2, "create"); SelectionRange2.create = create2; 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"); 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"); SemanticTokens2.is = is2; })(SemanticTokens || (SemanticTokens = {})); (function(InlineValueText2) { function create2(range3, text3) { return { range: range3, text: text3 }; } __name(create2, "create"); InlineValueText2.create = create2; function is2(value2) { const candidate = value2; return candidate !== void 0 && candidate !== null && Range.is(candidate.range) && Is.string(candidate.text); } __name(is2, "is"); InlineValueText2.is = is2; })(InlineValueText || (InlineValueText = {})); (function(InlineValueVariableLookup2) { function create2(range3, variableName, caseSensitiveLookup) { return { range: range3, variableName, caseSensitiveLookup }; } __name(create2, "create"); InlineValueVariableLookup2.create = create2; 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"); InlineValueVariableLookup2.is = is2; })(InlineValueVariableLookup || (InlineValueVariableLookup = {})); (function(InlineValueEvaluatableExpression2) { function create2(range3, expression) { return { range: range3, expression }; } __name(create2, "create"); InlineValueEvaluatableExpression2.create = create2; 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"); InlineValueEvaluatableExpression2.is = is2; })(InlineValueEvaluatableExpression || (InlineValueEvaluatableExpression = {})); (function(InlineValueContext2) { function create2(frameId, stoppedLocation) { return { frameId, stoppedLocation }; } __name(create2, "create"); InlineValueContext2.create = create2; function is2(value2) { const candidate = value2; return Is.defined(candidate) && Range.is(value2.stoppedLocation); } __name(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"); InlayHintKind2.is = is2; })(InlayHintKind || (InlayHintKind = {})); (function(InlayHintLabelPart2) { function create2(value2) { return { value: value2 }; } __name(create2, "create"); InlayHintLabelPart2.create = create2; 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"); InlayHintLabelPart2.is = is2; })(InlayHintLabelPart || (InlayHintLabelPart = {})); (function(InlayHint2) { function create2(position5, label, kind) { const result = { position: position5, label }; if (kind !== void 0) { result.kind = kind; } return result; } __name(create2, "create"); InlayHint2.create = create2; 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"); InlayHint2.is = is2; })(InlayHint || (InlayHint = {})); (function(StringValue2) { function createSnippet(value2) { return { kind: "snippet", value: value2 }; } __name(createSnippet, "createSnippet"); StringValue2.createSnippet = createSnippet; })(StringValue || (StringValue = {})); (function(InlineCompletionItem2) { function create2(insertText, filterText, range3, command) { return { insertText, filterText, range: range3, command }; } __name(create2, "create"); InlineCompletionItem2.create = create2; })(InlineCompletionItem || (InlineCompletionItem = {})); (function(InlineCompletionList2) { function create2(items) { return { items }; } __name(create2, "create"); InlineCompletionList2.create = create2; })(InlineCompletionList || (InlineCompletionList = {})); (function(InlineCompletionTriggerKind2) { InlineCompletionTriggerKind2.Invoked = 0; InlineCompletionTriggerKind2.Automatic = 1; })(InlineCompletionTriggerKind || (InlineCompletionTriggerKind = {})); (function(SelectedCompletionInfo2) { function create2(range3, text3) { return { range: range3, text: text3 }; } __name(create2, "create"); SelectedCompletionInfo2.create = create2; })(SelectedCompletionInfo || (SelectedCompletionInfo = {})); (function(InlineCompletionContext2) { function create2(triggerKind, selectedCompletionInfo) { return { triggerKind, selectedCompletionInfo }; } __name(create2, "create"); InlineCompletionContext2.create = create2; })(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"); WorkspaceFolder2.is = is2; })(WorkspaceFolder || (WorkspaceFolder = {})); (function(TextDocument3) { function create2(uri, languageId, version4, content) { return new FullTextDocument(uri, languageId, version4, content); } __name(create2, "create"); TextDocument3.create = create2; 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"); TextDocument3.is = is2; function applyEdits(document2, edits) { let text3 = document2.getText(); let sortedEdits = mergeSort2(edits, (a2, b2) => { let diff2 = a2.range.start.line - b2.range.start.line; if (diff2 === 0) { return a2.range.start.character - b2.range.start.character; } return diff2; }); let lastModifiedOffset = text3.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) { text3 = text3.substring(0, startOffset) + e3.newText + text3.substring(endOffset, text3.length); } else { throw new Error("Overlapping edit"); } lastModifiedOffset = startOffset; } return text3; } __name(applyEdits, "applyEdits"); TextDocument3.applyEdits = applyEdits; function mergeSort2(data5, compare) { if (data5.length <= 1) { return data5; } const p3 = data5.length / 2 | 0; const left3 = data5.slice(0, p3); const right3 = data5.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) { data5[i2++] = left3[leftIdx++]; } else { data5[i2++] = right3[rightIdx++]; } } while (leftIdx < left3.length) { data5[i2++] = left3[leftIdx++]; } while (rightIdx < right3.length) { data5[i2++] = right3[rightIdx++]; } return data5; } __name(mergeSort2, "mergeSort"); })(TextDocument || (TextDocument = {})); FullTextDocument = class { static { __name(this, "FullTextDocument"); } constructor(uri, languageId, version4, content) { this._uri = uri; this._languageId = languageId; this._version = version4; 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, version4) { this._content = event3.text; this._version = version4; this._lineOffsets = void 0; } getLineOffsets() { if (this._lineOffsets === void 0) { let lineOffsets = []; let text3 = this._content; let isLineStart = true; for (let i2 = 0; i2 < text3.length; i2++) { if (isLineStart) { lineOffsets.push(i2); isLineStart = false; } let ch = text3.charAt(i2); isLineStart = ch === "\r" || ch === "\n"; if (ch === "\r" && i2 + 1 < text3.length && text3.charAt(i2 + 1) === "\n") { i2++; } } if (isLineStart && text3.length > 0) { lineOffsets.push(text3.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 toString6 = Object.prototype.toString; function defined(value2) { return typeof value2 !== "undefined"; } __name(defined, "defined"); Is2.defined = defined; function undefined2(value2) { return typeof value2 === "undefined"; } __name(undefined2, "undefined"); Is2.undefined = undefined2; function boolean(value2) { return value2 === true || value2 === false; } __name(boolean, "boolean"); Is2.boolean = boolean; function string3(value2) { return toString6.call(value2) === "[object String]"; } __name(string3, "string"); Is2.string = string3; function number7(value2) { return toString6.call(value2) === "[object Number]"; } __name(number7, "number"); Is2.number = number7; function numberRange(value2, min9, max10) { return toString6.call(value2) === "[object Number]" && min9 <= value2 && value2 <= max10; } __name(numberRange, "numberRange"); Is2.numberRange = numberRange; function integer4(value2) { return toString6.call(value2) === "[object Number]" && -2147483648 <= value2 && value2 <= 2147483647; } __name(integer4, "integer"); Is2.integer = integer4; function uinteger2(value2) { return toString6.call(value2) === "[object Number]" && 0 <= value2 && value2 <= 2147483647; } __name(uinteger2, "uinteger"); Is2.uinteger = uinteger2; function func(value2) { return toString6.call(value2) === "[object Function]"; } __name(func, "func"); Is2.func = func; function objectLiteral(value2) { return value2 !== null && typeof value2 === "object"; } __name(objectLiteral, "objectLiteral"); Is2.objectLiteral = objectLiteral; function typedArray(value2, check) { return Array.isArray(value2) && value2.every(check); } __name(typedArray, "typedArray"); Is2.typedArray = typedArray; })(Is || (Is = {})); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/parser/cst-node-builder.js var CstNodeBuilder, AbstractCstNode, LeafCstNodeImpl, CompositeCstNodeImpl, CstNodeContainer, RootCstNodeImpl; var init_cst_node_builder = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/parser/cst-node-builder.js"() { "use strict"; init_main(); init_syntax_tree(); init_cst_utils(); CstNodeBuilder = class { static { __name(this, "CstNodeBuilder"); } constructor() { this.nodeStack = []; } get current() { return this.nodeStack[this.nodeStack.length - 1]; } 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, false); 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); } } } construct(item) { const current = this.current; if (typeof item.$type === "string") { this.current.astNode = item; } item.$cstNode = current; const node2 = this.nodeStack.pop(); if ((node2 === null || node2 === void 0 ? void 0 : node2.content.length) === 0) { this.removeNode(node2); } } addHiddenTokens(hiddenTokens) { for (const token2 of hiddenTokens) { const hiddenNode = new LeafCstNodeImpl(token2.startOffset, token2.image.length, tokenToRange(token2), token2.tokenType, true); hiddenNode.root = this.rootNode; this.addHiddenToken(this.rootNode, hiddenNode); } } addHiddenToken(node2, token2) { const { offset: tokenStart, end: tokenEnd } = token2; for (let i2 = 0; i2 < node2.content.length; i2++) { const child = node2.content[i2]; const { offset: childStart, end: childEnd } = child; if (isCompositeCstNode(child) && tokenStart > childStart && tokenEnd < childEnd) { this.addHiddenToken(child, token2); return; } else if (tokenEnd <= childStart) { node2.content.splice(i2, 0, token2); return; } } node2.content.push(token2); } }; AbstractCstNode = class { static { __name(this, "AbstractCstNode"); } /** @deprecated use `container` instead. */ get parent() { return this.container; } /** @deprecated use `grammarSource` instead. */ get feature() { return this.grammarSource; } get hidden() { return false; } get astNode() { var _a, _b; const node2 = typeof ((_a = this._astNode) === null || _a === void 0 ? void 0 : _a.$type) === "string" ? this._astNode : (_b = this.container) === null || _b === void 0 ? void 0 : _b.astNode; if (!node2) { throw new Error("This node has no associated AST element"); } return node2; } set astNode(value2) { this._astNode = value2; } /** @deprecated use `astNode` instead. */ get element() { return this.astNode; } get text() { return this.root.fullText.substring(this.offset, this.end); } }; LeafCstNodeImpl = class extends AbstractCstNode { static { __name(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"); } constructor() { super(...arguments); this.content = new CstNodeContainer(this); } /** @deprecated use `content` instead. */ get children() { return this.content; } get offset() { var _a, _b; return (_b = (_a = this.firstNonHiddenNode) === null || _a === void 0 ? void 0 : _a.offset) !== null && _b !== void 0 ? _b : 0; } get length() { return this.end - this.offset; } get end() { var _a, _b; return (_b = (_a = this.lastNonHiddenNode) === null || _a === void 0 ? void 0 : _a.end) !== null && _b !== void 0 ? _b : 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"); } 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, count, ...items) { this.addParents(items); return super.splice(start3, count, ...items); } addParents(items) { for (const item of items) { item.container = this.parent; } } }; RootCstNodeImpl = class extends CompositeCstNodeImpl { static { __name(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 !== null && input !== void 0 ? input : ""; } }; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/parser/langium-parser.js function isDataTypeNode(node2) { return node2.$type === DatatypeSymbol; } var DatatypeSymbol, ruleSuffix, withRuleSuffix, AbstractLangiumParser, LangiumParser, AbstractParserErrorMessageProvider, LangiumParserErrorMessageProvider, LangiumCompletionParser, defaultConfig3, ChevrotainWrapper; var init_langium_parser = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/parser/langium-parser.js"() { "use strict"; init_api5(); init_lib2(); init_ast(); init_grammar_utils(); init_ast_utils(); init_cst_node_builder(); DatatypeSymbol = Symbol("Datatype"); __name(isDataTypeNode, "isDataTypeNode"); ruleSuffix = "\u200B"; withRuleSuffix = /* @__PURE__ */ __name((name) => name.endsWith(ruleSuffix) ? name : name + ruleSuffix, "withRuleSuffix"); AbstractLangiumParser = class { static { __name(this, "AbstractLangiumParser"); } constructor(services) { this._unorderedGroups = /* @__PURE__ */ new Map(); this.lexer = services.parser.Lexer; const tokens2 = this.lexer.definition; this.wrapper = new ChevrotainWrapper(tokens2, Object.assign(Object.assign({}, services.parser.ParserConfig), { 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); } 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"); } 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.linker = services.references.Linker; this.converter = services.parser.ValueConverter; this.astReflection = services.shared.AstReflection; } rule(rule, impl2) { const type3 = rule.fragment ? void 0 : isDataTypeRule(rule) ? DatatypeSymbol : getTypeName(rule); const ruleMethod = this.wrapper.DEFINE_RULE(withRuleSuffix(rule.name), this.startImplementation(type3, impl2).bind(this)); if (rule.entry) { this.mainRule = ruleMethod; } return ruleMethod; } parse(input) { this.nodeBuilder.buildRootNode(input); const lexerResult = this.lexer.tokenize(input); this.wrapper.input = lexerResult.tokens; const result = this.mainRule.call(this.wrapper, {}); this.nodeBuilder.addHiddenTokens(lexerResult.hidden); this.unorderedGroups.clear(); return { value: result, lexerErrors: lexerResult.errors, parserErrors: this.wrapper.errors }; } startImplementation($type, implementation) { return (args) => { if (!this.isRecording()) { const node2 = { $type }; this.stack.push(node2); if ($type === DatatypeSymbol) { node2.value = ""; } } let result; try { result = implementation(args); } catch (err) { result = void 0; } if (!this.isRecording() && result === void 0) { result = this.construct(); } return result; }; } consume(idx, tokenType, feature) { const token2 = this.wrapper.wrapConsume(idx, tokenType); if (!this.isRecording() && this.isValidToken(token2)) { const leafNode = this.nodeBuilder.buildLeafNode(token2, feature); const { assignment, isCrossRef } = 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, isCrossRef); } else if (isDataTypeNode(current)) { let text3 = token2.image; if (!isKeyword(feature)) { text3 = this.converter.convert(text3, leafNode).toString(); } current.value += text3; } } } /** * 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, feature, args) { let cstNode; if (!this.isRecording()) { cstNode = this.nodeBuilder.buildCompositeNode(feature); } const subruleResult = this.wrapper.wrapSubrule(idx, rule, args); if (!this.isRecording() && cstNode && cstNode.length > 0) { this.performSubruleAssignment(subruleResult, feature, cstNode); } } performSubruleAssignment(result, feature, cstNode) { const { assignment, isCrossRef } = this.getAssignment(feature); if (assignment) { this.assign(assignment.operator, assignment.feature, result, cstNode, isCrossRef); } else if (!assignment) { const current = this.current; if (isDataTypeNode(current)) { current.value += result.toString(); } else if (typeof result === "object" && result) { const resultKind = result.$type; const object3 = this.assignWithoutOverride(result, current); if (resultKind) { object3.$type = resultKind; } const newItem = object3; this.stack.pop(); this.stack.push(newItem); } } } action($type, action) { if (!this.isRecording()) { let last3 = this.current; if (!last3.$cstNode && action.feature && action.operator) { last3 = this.construct(false); const feature = last3.$cstNode.feature; this.nodeBuilder.buildCompositeNode(feature); } const newItem = { $type }; this.stack.pop(); this.stack.push(newItem); if (action.feature && action.operator) { this.assign(action.operator, action.feature, last3, last3.$cstNode, false); } } } construct(pop = true) { if (this.isRecording()) { return void 0; } const obj = this.current; linkContentToContainer(obj); this.nodeBuilder.construct(obj); if (pop) { this.stack.pop(); } if (isDataTypeNode(obj)) { return this.converter.convert(obj.value, obj.$cstNode); } else { assignMandatoryProperties(this.astReflection, obj); } return obj; } getAssignment(feature) { if (!this.assignmentMap.has(feature)) { const assignment = getContainerOfType(feature, isAssignment); this.assignmentMap.set(feature, { assignment, isCrossRef: assignment ? isCrossReference(assignment.terminal) : false }); } return this.assignmentMap.get(feature); } assign(operator, feature, value2, cstNode, isCrossRef) { const obj = this.current; let item; if (isCrossRef && typeof value2 === "string") { item = this.linker.buildReference(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; } } return target; } get definitionErrors() { return this.wrapper.definitionErrors; } }; AbstractParserErrorMessageProvider = class { static { __name(this, "AbstractParserErrorMessageProvider"); } buildMismatchTokenMessage(options3) { return defaultParserErrorProvider.buildMismatchTokenMessage(options3); } buildNotAllInputParsedMessage(options3) { return defaultParserErrorProvider.buildNotAllInputParsedMessage(options3); } buildNoViableAltMessage(options3) { return defaultParserErrorProvider.buildNoViableAltMessage(options3); } buildEarlyExitMessage(options3) { return defaultParserErrorProvider.buildEarlyExitMessage(options3); } }; LangiumParserErrorMessageProvider = class extends AbstractParserErrorMessageProvider { static { __name(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"); } 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); 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)); if (rule.entry) { this.mainRule = ruleMethod; } return ruleMethod; } resetState() { this.elementStack = []; this.lastElementStack = []; this.nextTokenIndex = 0; this.stackSize = 0; } startImplementation(implementation) { return (args) => { const size5 = this.keepStackSize(); try { implementation(args); } finally { this.resetStackSize(size5); } }; } removeUnexpectedElements() { this.elementStack.splice(this.stackSize); } keepStackSize() { const size5 = this.elementStack.length; this.stackSize = size5; return size5; } resetStackSize(size5) { this.removeUnexpectedElements(); this.stackSize = size5; } 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, 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"); } constructor(tokens2, config6) { const useDefaultLookahead = config6 && "maxLookahead" in config6; super(tokens2, Object.assign(Object.assign(Object.assign({}, defaultConfig3), { lookaheadStrategy: useDefaultLookahead ? new LLkLookaheadStrategy({ maxLookahead: config6.maxLookahead }) : new LLStarLookaheadStrategy() }), config6)); } get IS_RECORDING() { return this.RECORDING_PHASE; } DEFINE_RULE(name, impl2) { return this.RULE(name, impl2); } wrapSelfAnalysis() { this.performSelfAnalysis(); } wrapConsume(idx, tokenType) { return this.consume(idx, tokenType); } 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); } }; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/parser/parser-builder-base.js function createParser(grammar, parser23, tokens2) { const rules = /* @__PURE__ */ new Map(); const parserContext = { parser: parser23, tokens: tokens2, rules, ruleNames: /* @__PURE__ */ new Map() }; buildRules(parserContext, grammar); return parser23; } 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 = Object.assign(Object.assign({}, parserContext), { consume: 1, optional: 1, subrule: 1, many: 1, or: 1 }); ctx.rules.set(rule.name, parserContext.parser.rule(rule, buildElement(ctx, rule.definition))); } } 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__ */ __name(() => 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 (isParserRule(rule)) { const idx = ctx.subrule++; const predicate = ruleCall.arguments.length > 0 ? buildRuleCallPredicate(rule, ruleCall.arguments) : () => ({}); return (args) => ctx.parser.subrule(idx, getRule(ctx, rule), 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 type: ${ruleCall.$type}`); } else { assertUnreachable(rule); } } function buildRuleCallPredicate(rule, namedArgs) { const predicates = namedArgs.map((e3) => buildPredicate(e3.value)); return (args) => { const ruleArgs = {}; for (let i2 = 0; i2 < predicates.length; i2++) { const ruleTarget = rule.parameters[i2]; const predicate = predicates[i2]; ruleArgs[ruleTarget.name] = 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__ */ __name(() => 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__ */ __name((groupIdx, lParser) => { const stackId = lParser.getRuleStack().join("-"); return `uGroup_${groupIdx}_${stackId}`; }, "idFunc"); const alternatives = /* @__PURE__ */ __name((args) => ctx.parser.alternatives(orIdx, methods.map((method, idx) => { const alt = { ALT: /* @__PURE__ */ __name(() => true, "ALT") }; const parser23 = ctx.parser; alt.ALT = () => { method.ALT(args); if (!parser23.isRecording()) { const key = idFunc(orIdx, parser23); if (!parser23.unorderedGroups.get(key)) { parser23.unorderedGroups.set(key, []); } const groupState = parser23.unorderedGroups.get(key); if (typeof (groupState === null || groupState === void 0 ? void 0 : groupState[idx]) === "undefined") { groupState[idx] = true; } } }; const gate = method.GATE; if (gate) { alt.GATE = () => gate(args); } else { alt.GATE = () => { const trackedAlternatives = parser23.unorderedGroups.get(idFunc(orIdx, parser23)); const allow = !(trackedAlternatives === null || trackedAlternatives === void 0 ? void 0 : 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 === null || assignment === void 0 ? void 0 : 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 idx = ctx.subrule++; return (args) => ctx.parser.subrule(idx, getRule(ctx, terminal.rule.ref), 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__ */ __name(() => method(args), "ALT"), GATE: /* @__PURE__ */ __name(() => gate(args), "GATE") }, { ALT: EMPTY_ALT(), GATE: /* @__PURE__ */ __name(() => !gate(args), "GATE") } ]); } else { return method; } } if (cardinality === "*") { const idx = ctx.many++; return (args) => ctx.parser.many(idx, { DEF: /* @__PURE__ */ __name(() => 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__ */ __name(() => ctx.parser.atLeastOne(idx, { DEF: /* @__PURE__ */ __name(() => method(args), "DEF") }), "ALT"), GATE: /* @__PURE__ */ __name(() => gate(args), "GATE") }, { ALT: EMPTY_ALT(), GATE: /* @__PURE__ */ __name(() => !gate(args), "GATE") } ]); } else { return (args) => ctx.parser.atLeastOne(idx, { DEF: /* @__PURE__ */ __name(() => method(args), "DEF") }); } } else if (cardinality === "?") { const idx = ctx.optional++; return (args) => ctx.parser.optional(idx, { DEF: /* @__PURE__ */ __name(() => method(args), "DEF"), GATE: gate ? () => gate(args) : void 0 }); } else { assertUnreachable(cardinality); } } function getRule(ctx, element3) { const name = getRuleName(ctx, element3); const rule = ctx.rules.get(name); if (!rule) throw new Error(`Rule "${name}" not found."`); return rule; } function getRuleName(ctx, element3) { if (isParserRule(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; } var init_parser_builder_base = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/parser/parser-builder-base.js"() { "use strict"; init_api5(); init_ast(); init_errors2(); init_stream(); init_grammar_utils(); __name(createParser, "createParser"); __name(buildRules, "buildRules"); __name(buildElement, "buildElement"); __name(buildAction, "buildAction"); __name(buildRuleCall, "buildRuleCall"); __name(buildRuleCallPredicate, "buildRuleCallPredicate"); __name(buildPredicate, "buildPredicate"); __name(buildAlternatives, "buildAlternatives"); __name(buildUnorderedGroup, "buildUnorderedGroup"); __name(buildGroup4, "buildGroup"); __name(getGuardCondition, "getGuardCondition"); __name(buildCrossReference, "buildCrossReference"); __name(buildKeyword, "buildKeyword"); __name(wrap, "wrap"); __name(getRule, "getRule"); __name(getRuleName, "getRuleName"); __name(getToken, "getToken"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/parser/completion-parser-builder.js function createCompletionParser(services) { const grammar = services.Grammar; const lexer2 = services.parser.Lexer; const parser23 = new LangiumCompletionParser(services); createParser(grammar, parser23, lexer2.definition); parser23.finalize(); return parser23; } var init_completion_parser_builder = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/parser/completion-parser-builder.js"() { "use strict"; init_langium_parser(); init_parser_builder_base(); __name(createCompletionParser, "createCompletionParser"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/parser/langium-parser-builder.js function createLangiumParser(services) { const parser23 = prepareLangiumParser(services); parser23.finalize(); return parser23; } function prepareLangiumParser(services) { const grammar = services.Grammar; const lexer2 = services.parser.Lexer; const parser23 = new LangiumParser(services); return createParser(grammar, parser23, lexer2.definition); } var init_langium_parser_builder = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/parser/langium-parser-builder.js"() { "use strict"; init_langium_parser(); init_parser_builder_base(); __name(createLangiumParser, "createLangiumParser"); __name(prepareLangiumParser, "prepareLangiumParser"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/parser/token-builder.js var DefaultTokenBuilder; var init_token_builder = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/parser/token-builder.js"() { "use strict"; init_api5(); init_ast(); init_ast_utils(); init_grammar_utils(); init_regexp_utils(); init_stream(); DefaultTokenBuilder = class { static { __name(this, "DefaultTokenBuilder"); } buildTokens(grammar, options3) { const reachableRules = stream(getAllReachableRules(grammar, false)); const terminalTokens = this.buildTerminalTokens(reachableRules); const tokens2 = this.buildKeywordTokens(reachableRules, terminalTokens, options3); terminalTokens.forEach((terminalToken) => { const pattern = terminalToken.PATTERN; if (typeof pattern === "object" && pattern && "test" in pattern && isWhitespace2(pattern)) { tokens2.unshift(terminalToken); } else { tokens2.push(terminalToken); } }); return tokens2; } buildTerminalTokens(rules) { return rules.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, LINE_BREAKS: true }; if (terminal.hidden) { tokenType.GROUP = isWhitespace2(regex2) ? Lexer2.SKIPPED : "hidden"; } return tokenType; } requiresCustomPattern(regex2) { if (regex2.flags.includes("u")) { return true; } else if (regex2.source.includes("?<=") || regex2.source.includes("? { stickyRegex.lastIndex = offset; const execResult = stickyRegex.exec(text3); return execResult; }; } buildKeywordTokens(rules, terminalTokens, options3) { return rules.filter(isParserRule).flatMap((rule) => streamAllContents(rule).filter(isKeyword)).distinct((e3) => e3.value).toArray().sort((a2, b2) => b2.value.length - a2.value.length).map((keyword) => this.buildKeywordToken(keyword, terminalTokens, Boolean(options3 === null || options3 === void 0 ? void 0 : options3.caseInsensitive))); } buildKeywordToken(keyword, terminalTokens, caseInsensitive) { return { name: keyword.value, PATTERN: this.buildKeywordPattern(keyword, caseInsensitive), LONGER_ALT: this.findLongerAlt(keyword, terminalTokens) }; } buildKeywordPattern(keyword, caseInsensitive) { return caseInsensitive ? new RegExp(getCaseInsensitivePattern(keyword.value)) : keyword.value; } findLongerAlt(keyword, terminalTokens) { return terminalTokens.reduce((longerAlts, token2) => { const pattern = token2 === null || token2 === void 0 ? void 0 : token2.PATTERN; if ((pattern === null || pattern === void 0 ? void 0 : pattern.source) && partialMatches("^" + pattern.source + "$", keyword.value)) { longerAlts.push(token2); } return longerAlts; }, []); } }; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/parser/value-converter.js var DefaultValueConverter, ValueConverter; var init_value_converter = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/parser/value-converter.js"() { "use strict"; init_ast(); init_grammar_utils(); DefaultValueConverter = class { static { __name(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) { var _a; switch (rule.name.toUpperCase()) { case "INT": return ValueConverter.convertInt(input); case "STRING": return ValueConverter.convertString(input); case "ID": return ValueConverter.convertID(input); } switch ((_a = getRuleType(rule)) === null || _a === void 0 ? void 0 : _a.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"); 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"); function convertID(input) { if (input.charAt(0) === "^") { return input.substring(1); } else { return input; } } __name(convertID, "convertID"); ValueConverter2.convertID = convertID; function convertInt(input) { return parseInt(input); } __name(convertInt, "convertInt"); ValueConverter2.convertInt = convertInt; function convertBigint(input) { return BigInt(input); } __name(convertBigint, "convertBigint"); ValueConverter2.convertBigint = convertBigint; function convertDate(input) { return new Date(input); } __name(convertDate, "convertDate"); ValueConverter2.convertDate = convertDate; function convertNumber(input) { return Number(input); } __name(convertNumber, "convertNumber"); ValueConverter2.convertNumber = convertNumber; function convertBoolean(input) { return input.toLowerCase() === "true"; } __name(convertBoolean, "convertBoolean"); ValueConverter2.convertBoolean = convertBoolean; })(ValueConverter || (ValueConverter = {})); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/vscode-jsonrpc/lib/common/ral.js var require_ral = __commonJS({ "../../node_modules/.pnpm/[email protected]/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"); (function(RAL2) { function install(ral) { if (ral === void 0) { throw new Error(`No runtime abstraction layer provided`); } _ral = ral; } __name(install, "install"); RAL2.install = install; })(RAL || (RAL = {})); exports2.default = RAL; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/vscode-jsonrpc/lib/common/is.js var require_is = __commonJS({ "../../node_modules/.pnpm/[email protected]/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"); exports2.boolean = boolean; function string3(value2) { return typeof value2 === "string" || value2 instanceof String; } __name(string3, "string"); exports2.string = string3; function number7(value2) { return typeof value2 === "number" || value2 instanceof Number; } __name(number7, "number"); exports2.number = number7; function error3(value2) { return value2 instanceof Error; } __name(error3, "error"); exports2.error = error3; function func(value2) { return typeof value2 === "function"; } __name(func, "func"); exports2.func = func; function array4(value2) { return Array.isArray(value2); } __name(array4, "array"); exports2.array = array4; function stringArray(value2) { return array4(value2) && value2.every((elem) => string3(elem)); } __name(stringArray, "stringArray"); exports2.stringArray = stringArray; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/vscode-jsonrpc/lib/common/events.js var require_events = __commonJS({ "../../node_modules/.pnpm/[email protected]/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(Event4) { const _disposable = { dispose() { } }; Event4.None = function() { return _disposable; }; })(Event3 || (exports2.Event = Event3 = {})); var CallbackList = class { static { __name(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__ */ __name(() => 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"); } 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__ */ __name(() => { 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() { }; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/vscode-jsonrpc/lib/common/cancellation.js var require_cancellation = __commonJS({ "../../node_modules/.pnpm/[email protected]/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"); 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"); } 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, "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; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/utils/cancellation.js var cancellation_exports = {}; var init_cancellation = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/utils/cancellation.js"() { "use strict"; __reExport(cancellation_exports, __toESM(require_cancellation(), 1)); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/utils/promise-utils.js function delayNextTick() { return new Promise((resolve3) => { if (typeof setImmediate === "undefined") { setTimeout(resolve3, 0); } else { setImmediate(resolve3); } }); } function startCancelableOperation() { lastTick = Date.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 = Date.now(); if (current - lastTick >= globalInterruptionPeriod) { lastTick = current; await delayNextTick(); } if (token2.isCancellationRequested) { throw OperationCancelled; } } var lastTick, globalInterruptionPeriod, OperationCancelled, Deferred; var init_promise_utils = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/utils/promise-utils.js"() { "use strict"; init_cancellation(); __name(delayNextTick, "delayNextTick"); lastTick = 0; globalInterruptionPeriod = 10; __name(startCancelableOperation, "startCancelableOperation"); __name(setInterruptionPeriod, "setInterruptionPeriod"); OperationCancelled = Symbol("OperationCancelled"); __name(isOperationCancelled, "isOperationCancelled"); __name(interruptAndCheck, "interruptAndCheck"); Deferred = class { static { __name(this, "Deferred"); } constructor() { this.promise = new Promise((resolve3, reject3) => { this.resolve = (arg) => { resolve3(arg); return this; }; this.reject = (err) => { reject3(err); return this; }; }); } }; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/vscode-languageserver-textdocument/lib/esm/main.js function mergeSort(data5, compare) { if (data5.length <= 1) { return data5; } const p3 = data5.length / 2 | 0; const left3 = data5.slice(0, p3); const right3 = data5.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) { data5[i2++] = left3[leftIdx++]; } else { data5[i2++] = right3[rightIdx++]; } } while (leftIdx < left3.length) { data5[i2++] = left3[leftIdx++]; } while (rightIdx < right3.length) { data5[i2++] = right3[rightIdx++]; } return data5; } function computeLineOffsets(text3, isAtLineStart, textOffset = 0) { const result = isAtLineStart ? [textOffset] : []; for (let i2 = 0; i2 < text3.length; i2++) { const ch = text3.charCodeAt(i2); if (isEOL(ch)) { if (ch === 13 && i2 + 1 < text3.length && text3.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; } var FullTextDocument2, TextDocument2; var init_main2 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/vscode-languageserver-textdocument/lib/esm/main.js"() { "use strict"; FullTextDocument2 = class _FullTextDocument { static { __name(this, "FullTextDocument"); } constructor(uri, languageId, version4, content) { this._uri = uri; this._languageId = languageId; this._version = version4; 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, version4) { 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 = version4; } 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 create2(uri, languageId, version4, content) { return new FullTextDocument2(uri, languageId, version4, content); } __name(create2, "create"); TextDocument3.create = create2; function update2(document2, changes, version4) { if (document2 instanceof FullTextDocument2) { document2.update(changes, version4); return document2; } else { throw new Error("TextDocument.update: document must be created by TextDocument.create"); } } __name(update2, "update"); TextDocument3.update = update2; function applyEdits(document2, edits) { const text3 = document2.getText(); const sortedEdits = mergeSort(edits.map(getWellformedEdit), (a2, b2) => { const diff2 = a2.range.start.line - b2.range.start.line; if (diff2 === 0) { return a2.range.start.character - b2.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(text3.substring(lastModifiedOffset, startOffset)); } if (e3.newText.length) { spans.push(e3.newText); } lastModifiedOffset = document2.offsetAt(e3.range.end); } spans.push(text3.substr(lastModifiedOffset)); return spans.join(""); } __name(applyEdits, "applyEdits"); TextDocument3.applyEdits = applyEdits; })(TextDocument2 || (TextDocument2 = {})); __name(mergeSort, "mergeSort"); __name(computeLineOffsets, "computeLineOffsets"); __name(isEOL, "isEOL"); __name(getWellformedRange, "getWellformedRange"); __name(getWellformedEdit, "getWellformedEdit"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/vscode-uri/lib/esm/index.mjs var LIB, URI2, Utils2; var init_esm2 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/vscode-uri/lib/esm/index.mjs"() { "use strict"; (() => { "use strict"; var t4 = { 470: (t5) => { function e4(t6) { if ("string" != typeof t6) throw new TypeError("Path must be a string. Received " + JSON.stringify(t6)); } __name(e4, "e"); function r3(t6, e6) { for (var r4, n4 = "", i2 = 0, o2 = -1, s2 = 0, h2 = 0; h2 <= t6.length; ++h2) { if (h2 < t6.length) r4 = t6.charCodeAt(h2); else { if (47 === r4) break; r4 = 47; } if (47 === r4) { if (o2 === h2 - 1 || 1 === s2) ; else if (o2 !== h2 - 1 && 2 === s2) { if (n4.length < 2 || 2 !== i2 || 46 !== n4.charCodeAt(n4.length - 1) || 46 !== n4.charCodeAt(n4.length - 2)) { if (n4.length > 2) { var a2 = n4.lastIndexOf("/"); if (a2 !== n4.length - 1) { -1 === a2 ? (n4 = "", i2 = 0) : i2 = (n4 = n4.slice(0, a2)).length - 1 - n4.lastIndexOf("/"), o2 = h2, s2 = 0; continue; } } else if (2 === n4.length || 1 === n4.length) { n4 = "", i2 = 0, o2 = h2, s2 = 0; continue; } } e6 && (n4.length > 0 ? n4 += "/.." : n4 = "..", i2 = 2); } else n4.length > 0 ? n4 += "/" + t6.slice(o2 + 1, h2) : n4 = t6.slice(o2 + 1, h2), i2 = h2 - o2 - 1; o2 = h2, s2 = 0; } else 46 === r4 && -1 !== s2 ? ++s2 : s2 = -1; } return n4; } __name(r3, "r"); var n3 = { resolve: /* @__PURE__ */ __name(function() { for (var t6, n4 = "", i2 = false, o2 = arguments.length - 1; o2 >= -1 && !i2; o2--) { var s2; o2 >= 0 ? s2 = arguments[o2] : (void 0 === t6 && (t6 = process.cwd()), s2 = t6), e4(s2), 0 !== s2.length && (n4 = s2 + "/" + n4, i2 = 47 === s2.charCodeAt(0)); } return n4 = r3(n4, !i2), i2 ? n4.length > 0 ? "/" + n4 : "/" : n4.length > 0 ? n4 : "."; }, "resolve"), normalize: /* @__PURE__ */ __name(function(t6) { if (e4(t6), 0 === t6.length) return "."; var n4 = 47 === t6.charCodeAt(0), i2 = 47 === t6.charCodeAt(t6.length - 1); return 0 !== (t6 = r3(t6, !n4)).length || n4 || (t6 = "."), t6.length > 0 && i2 && (t6 += "/"), n4 ? "/" + t6 : t6; }, "normalize"), isAbsolute: /* @__PURE__ */ __name(function(t6) { return e4(t6), t6.length > 0 && 47 === t6.charCodeAt(0); }, "isAbsolute"), join: /* @__PURE__ */ __name(function() { if (0 === arguments.length) return "."; for (var t6, r4 = 0; r4 < arguments.length; ++r4) { var i2 = arguments[r4]; e4(i2), i2.length > 0 && (void 0 === t6 ? t6 = i2 : t6 += "/" + i2); } return void 0 === t6 ? "." : n3.normalize(t6); }, "join"), relative: /* @__PURE__ */ __name(function(t6, r4) { if (e4(t6), e4(r4), t6 === r4) return ""; if ((t6 = n3.resolve(t6)) === (r4 = n3.resolve(r4))) return ""; for (var i2 = 1; i2 < t6.length && 47 === t6.charCodeAt(i2); ++i2) ; for (var o2 = t6.length, s2 = o2 - i2, h2 = 1; h2 < r4.length && 47 === r4.charCodeAt(h2); ++h2) ; for (var a2 = r4.length - h2, c3 = s2 < a2 ? s2 : a2, f3 = -1, u2 = 0; u2 <= c3; ++u2) { if (u2 === c3) { if (a2 > c3) { if (47 === r4.charCodeAt(h2 + u2)) return r4.slice(h2 + u2 + 1); if (0 === u2) return r4.slice(h2 + u2); } else s2 > c3 && (47 === t6.charCodeAt(i2 + u2) ? f3 = u2 : 0 === u2 && (f3 = 0)); break; } var l2 = t6.charCodeAt(i2 + u2); if (l2 !== r4.charCodeAt(h2 + u2)) break; 47 === l2 && (f3 = u2); } var g2 = ""; for (u2 = i2 + f3 + 1; u2 <= o2; ++u2) u2 !== o2 && 47 !== t6.charCodeAt(u2) || (0 === g2.length ? g2 += ".." : g2 += "/.."); return g2.length > 0 ? g2 + r4.slice(h2 + f3) : (h2 += f3, 47 === r4.charCodeAt(h2) && ++h2, r4.slice(h2)); }, "relative"), _makeLong: /* @__PURE__ */ __name(function(t6) { return t6; }, "_makeLong"), dirname: /* @__PURE__ */ __name(function(t6) { if (e4(t6), 0 === t6.length) return "."; for (var r4 = t6.charCodeAt(0), n4 = 47 === r4, i2 = -1, o2 = true, s2 = t6.length - 1; s2 >= 1; --s2) if (47 === (r4 = t6.charCodeAt(s2))) { if (!o2) { i2 = s2; break; } } else o2 = false; return -1 === i2 ? n4 ? "/" : "." : n4 && 1 === i2 ? "//" : t6.slice(0, i2); }, "dirname"), basename: /* @__PURE__ */ __name(function(t6, r4) { if (void 0 !== r4 && "string" != typeof r4) throw new TypeError('"ext" argument must be a string'); e4(t6); var n4, i2 = 0, o2 = -1, s2 = true; if (void 0 !== r4 && r4.length > 0 && r4.length <= t6.length) { if (r4.length === t6.length && r4 === t6) return ""; var h2 = r4.length - 1, a2 = -1; for (n4 = t6.length - 1; n4 >= 0; --n4) { var c3 = t6.charCodeAt(n4); if (47 === c3) { if (!s2) { i2 = n4 + 1; break; } } else -1 === a2 && (s2 = false, a2 = n4 + 1), h2 >= 0 && (c3 === r4.charCodeAt(h2) ? -1 == --h2 && (o2 = n4) : (h2 = -1, o2 = a2)); } return i2 === o2 ? o2 = a2 : -1 === o2 && (o2 = t6.length), t6.slice(i2, o2); } for (n4 = t6.length - 1; n4 >= 0; --n4) if (47 === t6.charCodeAt(n4)) { if (!s2) { i2 = n4 + 1; break; } } else -1 === o2 && (s2 = false, o2 = n4 + 1); return -1 === o2 ? "" : t6.slice(i2, o2); }, "basename"), extname: /* @__PURE__ */ __name(function(t6) { e4(t6); for (var r4 = -1, n4 = 0, i2 = -1, o2 = true, s2 = 0, h2 = t6.length - 1; h2 >= 0; --h2) { var a2 = t6.charCodeAt(h2); if (47 !== a2) -1 === i2 && (o2 = false, i2 = h2 + 1), 46 === a2 ? -1 === r4 ? r4 = h2 : 1 !== s2 && (s2 = 1) : -1 !== r4 && (s2 = -1); else if (!o2) { n4 = h2 + 1; break; } } return -1 === r4 || -1 === i2 || 0 === s2 || 1 === s2 && r4 === i2 - 1 && r4 === n4 + 1 ? "" : t6.slice(r4, i2); }, "extname"), format: /* @__PURE__ */ __name(function(t6) { if (null === t6 || "object" != typeof t6) throw new TypeError('The "pathObject" argument must be of type Object. Received type ' + typeof t6); return function(t7, e6) { var r4 = e6.dir || e6.root, n4 = e6.base || (e6.name || "") + (e6.ext || ""); return r4 ? r4 === e6.root ? r4 + n4 : r4 + "/" + n4 : n4; }(0, t6); }, "format"), parse: /* @__PURE__ */ __name(function(t6) { e4(t6); var r4 = { root: "", dir: "", base: "", ext: "", name: "" }; if (0 === t6.length) return r4; var n4, i2 = t6.charCodeAt(0), o2 = 47 === i2; o2 ? (r4.root = "/", n4 = 1) : n4 = 0; for (var s2 = -1, h2 = 0, a2 = -1, c3 = true, f3 = t6.length - 1, u2 = 0; f3 >= n4; --f3) if (47 !== (i2 = t6.charCodeAt(f3))) -1 === a2 && (c3 = false, a2 = f3 + 1), 46 === i2 ? -1 === s2 ? s2 = f3 : 1 !== u2 && (u2 = 1) : -1 !== s2 && (u2 = -1); else if (!c3) { h2 = f3 + 1; break; } return -1 === s2 || -1 === a2 || 0 === u2 || 1 === u2 && s2 === a2 - 1 && s2 === h2 + 1 ? -1 !== a2 && (r4.base = r4.name = 0 === h2 && o2 ? t6.slice(1, a2) : t6.slice(h2, a2)) : (0 === h2 && o2 ? (r4.name = t6.slice(1, s2), r4.base = t6.slice(1, a2)) : (r4.name = t6.slice(h2, s2), r4.base = t6.slice(h2, a2)), r4.ext = t6.slice(s2, a2)), h2 > 0 ? r4.dir = t6.slice(0, h2 - 1) : o2 && (r4.dir = "/"), r4; }, "parse"), sep: "/", delimiter: ":", win32: null, posix: null }; n3.posix = n3, t5.exports = n3; } }, e3 = {}; function r2(n3) { var i2 = e3[n3]; if (void 0 !== i2) return i2.exports; var o2 = e3[n3] = { exports: {} }; return t4[n3](o2, o2.exports, r2), o2.exports; } __name(r2, "r"); r2.d = (t5, e4) => { for (var n3 in e4) r2.o(e4, n3) && !r2.o(t5, n3) && Object.defineProperty(t5, n3, { enumerable: true, get: e4[n3] }); }, r2.o = (t5, e4) => Object.prototype.hasOwnProperty.call(t5, e4), r2.r = (t5) => { "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(t5, Symbol.toStringTag, { value: "Module" }), Object.defineProperty(t5, "__esModule", { value: true }); }; var n2 = {}; (() => { let t5; if (r2.r(n2), r2.d(n2, { URI: /* @__PURE__ */ __name(() => f3, "URI"), Utils: /* @__PURE__ */ __name(() => P2, "Utils") }), "object" == typeof process) t5 = "win32" === process.platform; else if ("object" == typeof navigator) { let e6 = navigator.userAgent; t5 = e6.indexOf("Windows") >= 0; } const e4 = /^\w[\w\d+.-]*$/, i2 = /^\//, o2 = /^\/\//; function s2(t6, r3) { if (!t6.scheme && r3) throw new Error(`[UriError]: Scheme is missing: {scheme: "", authority: "${t6.authority}", path: "${t6.path}", query: "${t6.query}", fragment: "${t6.fragment}"}`); if (t6.scheme && !e4.test(t6.scheme)) throw new Error("[UriError]: Scheme contains illegal characters."); if (t6.path) { if (t6.authority) { if (!i2.test(t6.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 (o2.test(t6.path)) throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters ("//")'); } } __name(s2, "s"); const h2 = "", a2 = "/", c3 = /^(([^:/?#]+?):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/; class f3 { static { __name(this, "f"); } static isUri(t6) { return t6 instanceof f3 || !!t6 && "string" == typeof t6.authority && "string" == typeof t6.fragment && "string" == typeof t6.path && "string" == typeof t6.query && "string" == typeof t6.scheme && "string" == typeof t6.fsPath && "function" == typeof t6.with && "function" == typeof t6.toString; } scheme; authority; path; query; fragment; constructor(t6, e6, r3, n3, i3, o3 = false) { "object" == typeof t6 ? (this.scheme = t6.scheme || h2, this.authority = t6.authority || h2, this.path = t6.path || h2, this.query = t6.query || h2, this.fragment = t6.fragment || h2) : (this.scheme = /* @__PURE__ */ function(t7, e7) { return t7 || e7 ? t7 : "file"; }(t6, o3), this.authority = e6 || h2, this.path = function(t7, e7) { switch (t7) { case "https": case "http": case "file": e7 ? e7[0] !== a2 && (e7 = a2 + e7) : e7 = a2; } return e7; }(this.scheme, r3 || h2), this.query = n3 || h2, this.fragment = i3 || h2, s2(this, o3)); } get fsPath() { return m2(this, false); } with(t6) { if (!t6) return this; let { scheme: e6, authority: r3, path: n3, query: i3, fragment: o3 } = t6; return void 0 === e6 ? e6 = this.scheme : null === e6 && (e6 = h2), void 0 === r3 ? r3 = this.authority : null === r3 && (r3 = h2), void 0 === n3 ? n3 = this.path : null === n3 && (n3 = h2), void 0 === i3 ? i3 = this.query : null === i3 && (i3 = h2), void 0 === o3 ? o3 = this.fragment : null === o3 && (o3 = h2), e6 === this.scheme && r3 === this.authority && n3 === this.path && i3 === this.query && o3 === this.fragment ? this : new l2(e6, r3, n3, i3, o3); } static parse(t6, e6 = false) { const r3 = c3.exec(t6); return r3 ? new l2(r3[2] || h2, C2(r3[4] || h2), C2(r3[5] || h2), C2(r3[7] || h2), C2(r3[9] || h2), e6) : new l2(h2, h2, h2, h2, h2); } static file(e6) { let r3 = h2; if (t5 && (e6 = e6.replace(/\\/g, a2)), e6[0] === a2 && e6[1] === a2) { const t6 = e6.indexOf(a2, 2); -1 === t6 ? (r3 = e6.substring(2), e6 = a2) : (r3 = e6.substring(2, t6), e6 = e6.substring(t6) || a2); } return new l2("file", r3, e6, h2, h2); } static from(t6) { const e6 = new l2(t6.scheme, t6.authority, t6.path, t6.query, t6.fragment); return s2(e6, true), e6; } toString(t6 = false) { return y5(this, t6); } toJSON() { return this; } static revive(t6) { if (t6) { if (t6 instanceof f3) return t6; { const e6 = new l2(t6); return e6._formatted = t6.external, e6._fsPath = t6._sep === u2 ? t6.fsPath : null, e6; } } return t6; } } const u2 = t5 ? 1 : void 0; class l2 extends f3 { static { __name(this, "l"); } _formatted = null; _fsPath = null; get fsPath() { return this._fsPath || (this._fsPath = m2(this, false)), this._fsPath; } toString(t6 = false) { return t6 ? y5(this, true) : (this._formatted || (this._formatted = y5(this, false)), this._formatted); } toJSON() { const t6 = { $mid: 1 }; return this._fsPath && (t6.fsPath = this._fsPath, t6._sep = u2), this._formatted && (t6.external = this._formatted), this.path && (t6.path = this.path), this.scheme && (t6.scheme = this.scheme), this.authority && (t6.authority = this.authority), this.query && (t6.query = this.query), this.fragment && (t6.fragment = this.fragment), t6; } } const g2 = { 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 d2(t6, e6, r3) { let n3, i3 = -1; for (let o3 = 0; o3 < t6.length; o3++) { const s3 = t6.charCodeAt(o3); if (s3 >= 97 && s3 <= 122 || s3 >= 65 && s3 <= 90 || s3 >= 48 && s3 <= 57 || 45 === s3 || 46 === s3 || 95 === s3 || 126 === s3 || e6 && 47 === s3 || r3 && 91 === s3 || r3 && 93 === s3 || r3 && 58 === s3) -1 !== i3 && (n3 += encodeURIComponent(t6.substring(i3, o3)), i3 = -1), void 0 !== n3 && (n3 += t6.charAt(o3)); else { void 0 === n3 && (n3 = t6.substr(0, o3)); const e7 = g2[s3]; void 0 !== e7 ? (-1 !== i3 && (n3 += encodeURIComponent(t6.substring(i3, o3)), i3 = -1), n3 += e7) : -1 === i3 && (i3 = o3); } } return -1 !== i3 && (n3 += encodeURIComponent(t6.substring(i3))), void 0 !== n3 ? n3 : t6; } __name(d2, "d"); function p3(t6) { let e6; for (let r3 = 0; r3 < t6.length; r3++) { const n3 = t6.charCodeAt(r3); 35 === n3 || 63 === n3 ? (void 0 === e6 && (e6 = t6.substr(0, r3)), e6 += g2[n3]) : void 0 !== e6 && (e6 += t6[r3]); } return void 0 !== e6 ? e6 : t6; } __name(p3, "p"); function m2(e6, r3) { let n3; return n3 = e6.authority && e6.path.length > 1 && "file" === e6.scheme ? `//${e6.authority}${e6.path}` : 47 === e6.path.charCodeAt(0) && (e6.path.charCodeAt(1) >= 65 && e6.path.charCodeAt(1) <= 90 || e6.path.charCodeAt(1) >= 97 && e6.path.charCodeAt(1) <= 122) && 58 === e6.path.charCodeAt(2) ? r3 ? e6.path.substr(1) : e6.path[1].toLowerCase() + e6.path.substr(2) : e6.path, t5 && (n3 = n3.replace(/\//g, "\\")), n3; } __name(m2, "m"); function y5(t6, e6) { const r3 = e6 ? p3 : d2; let n3 = "", { scheme: i3, authority: o3, path: s3, query: h3, fragment: c4 } = t6; if (i3 && (n3 += i3, n3 += ":"), (o3 || "file" === i3) && (n3 += a2, n3 += a2), o3) { let t7 = o3.indexOf("@"); if (-1 !== t7) { const e7 = o3.substr(0, t7); o3 = o3.substr(t7 + 1), t7 = e7.lastIndexOf(":"), -1 === t7 ? n3 += r3(e7, false, false) : (n3 += r3(e7.substr(0, t7), false, false), n3 += ":", n3 += r3(e7.substr(t7 + 1), false, true)), n3 += "@"; } o3 = o3.toLowerCase(), t7 = o3.lastIndexOf(":"), -1 === t7 ? n3 += r3(o3, false, true) : (n3 += r3(o3.substr(0, t7), false, true), n3 += o3.substr(t7)); } if (s3) { if (s3.length >= 3 && 47 === s3.charCodeAt(0) && 58 === s3.charCodeAt(2)) { const t7 = s3.charCodeAt(1); t7 >= 65 && t7 <= 90 && (s3 = `/${String.fromCharCode(t7 + 32)}:${s3.substr(3)}`); } else if (s3.length >= 2 && 58 === s3.charCodeAt(1)) { const t7 = s3.charCodeAt(0); t7 >= 65 && t7 <= 90 && (s3 = `${String.fromCharCode(t7 + 32)}:${s3.substr(2)}`); } n3 += r3(s3, true, false); } return h3 && (n3 += "?", n3 += r3(h3, false, false)), c4 && (n3 += "#", n3 += e6 ? c4 : d2(c4, false, false)), n3; } __name(y5, "y"); function v3(t6) { try { return decodeURIComponent(t6); } catch { return t6.length > 3 ? t6.substr(0, 3) + v3(t6.substr(3)) : t6; } } __name(v3, "v"); const b2 = /(%[0-9A-Za-z][0-9A-Za-z])+/g; function C2(t6) { return t6.match(b2) ? t6.replace(b2, (t7) => v3(t7)) : t6; } __name(C2, "C"); var A2 = r2(470); const w3 = A2.posix || A2, x5 = "/"; var P2; !function(t6) { t6.joinPath = function(t7, ...e6) { return t7.with({ path: w3.join(t7.path, ...e6) }); }, t6.resolvePath = function(t7, ...e6) { let r3 = t7.path, n3 = false; r3[0] !== x5 && (r3 = x5 + r3, n3 = true); let i3 = w3.resolve(r3, ...e6); return n3 && i3[0] === x5 && !t7.authority && (i3 = i3.substring(1)), t7.with({ path: i3 }); }, t6.dirname = function(t7) { if (0 === t7.path.length || t7.path === x5) return t7; let e6 = w3.dirname(t7.path); return 1 === e6.length && 46 === e6.charCodeAt(0) && (e6 = ""), t7.with({ path: e6 }); }, t6.basename = function(t7) { return w3.basename(t7.path); }, t6.extname = function(t7) { return w3.extname(t7.path); }; }(P2 || (P2 = {})); })(), LIB = n2; })(); ({ URI: URI2, Utils: Utils2 } = LIB); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/utils/uri-utils.js var UriUtils; var init_uri_utils = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/utils/uri-utils.js"() { "use strict"; init_esm2(); (function(UriUtils2) { UriUtils2.basename = Utils2.basename; UriUtils2.dirname = Utils2.dirname; UriUtils2.extname = Utils2.extname; UriUtils2.joinPath = Utils2.joinPath; UriUtils2.resolvePath = Utils2.resolvePath; function equals(a2, b2) { return (a2 === null || a2 === void 0 ? void 0 : a2.toString()) === (b2 === null || b2 === void 0 ? void 0 : b2.toString()); } __name(equals, "equals"); UriUtils2.equals = equals; function relative(from2, to) { const fromPath = typeof from2 === "string" ? from2 : from2.path; const toPath2 = typeof to === "string" ? to : to.path; const fromParts = fromPath.split("/").filter((e3) => e3.length > 0); const toParts = toPath2.split("/").filter((e3) => e3.length > 0); 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"); UriUtils2.relative = relative; })(UriUtils || (UriUtils = {})); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/workspace/documents.js var DocumentState, DefaultLangiumDocumentFactory, DefaultLangiumDocuments; var init_documents = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/workspace/documents.js"() { "use strict"; init_main2(); init_documents(); init_cancellation(); init_stream(); init_uri_utils(); (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"); } 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, cancellationToken) { uri = uri !== null && uri !== void 0 ? uri : URI2.parse(textDocument.uri); if (cancellationToken) { return this.createAsync(uri, textDocument, cancellationToken); } else { return this.create(uri, textDocument); } } fromString(text3, uri, cancellationToken) { if (cancellationToken) { return this.createAsync(uri, text3, cancellationToken); } else { return this.create(uri, text3); } } fromModel(model, uri) { return this.create(uri, { $model: model }); } create(uri, content) { if (typeof content === "string") { const parseResult = this.parse(uri, content); 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()); 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, text3) { let document2; if (textDocument) { document2 = { parseResult, uri, state: DocumentState.Parsed, references: [], textDocument }; } else { const textDocumentGetter = this.createTextDocumentGetter(uri, text3); document2 = { parseResult, uri, state: DocumentState.Parsed, references: [], get textDocument() { return textDocumentGetter(); } }; } parseResult.value.$document = document2; return document2; } async update(document2, cancellationToken) { var _a, _b; const oldText = (_a = document2.parseResult.value.$cstNode) === null || _a === void 0 ? void 0 : _a.root.fullText; const textDocument = (_b = this.textDocuments) === null || _b === void 0 ? void 0 : _b.get(document2.uri.toString()); const text3 = textDocument ? textDocument.getText() : await this.fileSystemProvider.readFile(document2.uri); if (textDocument) { Object.defineProperty(document2, "textDocument", { value: textDocument }); } else { const textDocumentGetter = this.createTextDocumentGetter(document2.uri, text3); Object.defineProperty(document2, "textDocument", { get: textDocumentGetter }); } if (oldText !== text3) { document2.parseResult = await this.parseAsync(document2.uri, text3, cancellationToken); document2.parseResult.value.$document = document2; } document2.state = DocumentState.Parsed; return document2; } parse(uri, text3) { const services = this.serviceRegistry.getServices(uri); return services.parser.LangiumParser.parse(text3); } parseAsync(uri, text3, cancellationToken) { const services = this.serviceRegistry.getServices(uri); return services.parser.AsyncParser.parse(text3, cancellationToken); } createTextDocumentGetter(uri, text3) { const serviceRegistry = this.serviceRegistry; let textDoc = void 0; return () => { return textDoc !== null && textDoc !== void 0 ? textDoc : textDoc = TextDocument2.create(uri.toString(), serviceRegistry.getServices(uri).LanguageMetaData.languageId, 0, text3 !== null && text3 !== void 0 ? text3 : ""); }; } }; DefaultLangiumDocuments = class { static { __name(this, "DefaultLangiumDocuments"); } constructor(services) { this.documentMap = /* @__PURE__ */ new Map(); this.langiumDocumentFactory = services.workspace.LangiumDocumentFactory; } get all() { return stream(this.documentMap.values()); } addDocument(document2) { const uriString = document2.uri.toString(); if (this.documentMap.has(uriString)) { throw new Error(`A document with the URI '${uriString}' is already present.`); } this.documentMap.set(uriString, document2); } getDocument(uri) { const uriString = uri.toString(); return this.documentMap.get(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, text3, cancellationToken) { if (cancellationToken) { return this.langiumDocumentFactory.fromString(text3, uri, cancellationToken).then((document2) => { this.addDocument(document2); return document2; }); } else { const document2 = this.langiumDocumentFactory.fromString(text3, uri); this.addDocument(document2); return document2; } } hasDocument(uri) { return this.documentMap.has(uri.toString()); } invalidateDocument(uri) { const uriString = uri.toString(); const langiumDoc = this.documentMap.get(uriString); if (langiumDoc) { langiumDoc.state = DocumentState.Changed; langiumDoc.precomputedScopes = void 0; langiumDoc.references = []; langiumDoc.diagnostics = void 0; } return langiumDoc; } deleteDocument(uri) { const uriString = uri.toString(); const langiumDoc = this.documentMap.get(uriString); if (langiumDoc) { langiumDoc.state = DocumentState.Changed; this.documentMap.delete(uriString); } return langiumDoc; } }; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/references/linker.js var DefaultLinker; var init_linker = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/references/linker.js"() { "use strict"; init_cancellation(); init_syntax_tree(); init_ast_utils(); init_promise_utils(); init_documents(); DefaultLinker = class { static { __name(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; } async link(document2, cancelToken = cancellation_exports.CancellationToken.None) { 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._ref === void 0) { try { const description = this.getCandidate(refInfo); if (isLinkingError(description)) { ref._ref = description; } else { ref._nodeDescription = description; if (this.langiumDocuments().hasDocument(description.documentUri)) { const linkedNode = this.loadAstNode(description); ref._ref = linkedNode !== null && linkedNode !== void 0 ? linkedNode : this.createLinkingError(refInfo, description); } } } catch (err) { ref._ref = Object.assign(Object.assign({}, refInfo), { message: `An error occurred while resolving reference to '${ref.$refText}': ${err}` }); } } document2.references.push(ref); } unlink(document2) { for (const ref of document2.references) { delete ref._ref; delete ref._nodeDescription; } document2.references = []; } getCandidate(refInfo) { const scope = this.scopeProvider.getScope(refInfo); const description = scope.getElement(refInfo.reference.$refText); return description !== null && description !== void 0 ? description : this.createLinkingError(refInfo); } buildReference(node2, property2, refNode, refText) { const linker = this; const reference = { $refNode: refNode, $refText: refText, get ref() { var _a; if (isAstNode(this._ref)) { return this._ref; } else if (isAstNodeDescription(this._nodeDescription)) { const linkedNode = linker.loadAstNode(this._nodeDescription); this._ref = linkedNode !== null && linkedNode !== void 0 ? linkedNode : linker.createLinkingError({ reference, container: node2, property: property2 }, this._nodeDescription); } else if (this._ref === void 0) { const refData = linker.getLinkedNode({ reference, container: node2, property: property2 }); if (refData.error && getDocument(node2).state < DocumentState.ComputedScopes) { return void 0; } this._ref = (_a = refData.node) !== null && _a !== void 0 ? _a : refData.error; this._nodeDescription = refData.descr; } 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; } 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) { return { error: Object.assign(Object.assign({}, refInfo), { message: `An error occurred while resolving reference to '${refInfo.reference.$refText}': ${err}` }) }; } } 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 = getDocument(refInfo.container); if (document2.state < DocumentState.ComputedScopes) { console.warn(`Attempted reference resolution before document reached ComputedScopes state (${document2.uri}).`); } const referenceType = this.reflection.getReferenceType(refInfo); return Object.assign(Object.assign({}, refInfo), { message: `Could not resolve reference to ${referenceType} named '${refInfo.reference.$refText}'.`, targetDescription }); } }; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/references/name-provider.js function isNamed(node2) { return typeof node2.name === "string"; } var DefaultNameProvider; var init_name_provider = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/references/name-provider.js"() { "use strict"; init_grammar_utils(); __name(isNamed, "isNamed"); DefaultNameProvider = class { static { __name(this, "DefaultNameProvider"); } getName(node2) { if (isNamed(node2)) { return node2.name; } return void 0; } getNameNode(node2) { return findNodeForProperty(node2.$cstNode, "name"); } }; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/references/references.js var DefaultReferences; var init_references = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/references/references.js"() { "use strict"; init_grammar_utils(); init_syntax_tree(); init_ast_utils(); init_cst_utils(); init_stream(); init_uri_utils(); DefaultReferences = class { static { __name(this, "DefaultReferences"); } constructor(services) { this.nameProvider = services.references.NameProvider; this.index = services.shared.workspace.IndexManager; this.nodeLocator = services.workspace.AstNodeLocator; } findDeclaration(sourceCstNode) { if (sourceCstNode) { const assignment = findAssignment(sourceCstNode); const nodeElem = sourceCstNode.astNode; if (assignment && nodeElem) { const reference = nodeElem[assignment.feature]; if (isReference(reference)) { return reference.ref; } else if (Array.isArray(reference)) { for (const ref of reference) { if (isReference(ref) && ref.$refNode && ref.$refNode.offset <= sourceCstNode.offset && ref.$refNode.end >= sourceCstNode.end) { return ref.ref; } } } } if (nodeElem) { const nameNode = this.nameProvider.getNameNode(nodeElem); if (nameNode && (nameNode === sourceCstNode || isChildNode(sourceCstNode, nameNode))) { return nodeElem; } } } return void 0; } findDeclarationNode(sourceCstNode) { const astNode = this.findDeclaration(sourceCstNode); if (astNode === null || astNode === void 0 ? void 0 : astNode.$cstNode) { const targetNode = this.nameProvider.getNameNode(astNode); return targetNode !== null && targetNode !== void 0 ? targetNode : astNode.$cstNode; } return void 0; } findReferences(targetNode, options3) { const refs = []; if (options3.includeDeclaration) { const ref = this.getReferenceToSelf(targetNode); if (ref) { refs.push(ref); } } let indexReferences = this.index.findAllReferences(targetNode, this.nodeLocator.getAstNodePath(targetNode)); if (options3.documentUri) { indexReferences = indexReferences.filter((ref) => UriUtils.equals(ref.sourceUri, options3.documentUri)); } refs.push(...indexReferences); return stream(refs); } getReferenceToSelf(targetNode) { const nameNode = this.nameProvider.getNameNode(targetNode); if (nameNode) { const doc = getDocument(targetNode); const path4 = this.nodeLocator.getAstNodePath(targetNode); return { sourceUri: doc.uri, sourcePath: path4, targetUri: doc.uri, targetPath: path4, segment: toDocumentSegment(nameNode), local: true }; } return void 0; } }; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/utils/collections.js var MultiMap, BiMap; var init_collections = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/utils/collections.js"() { "use strict"; init_stream(); MultiMap = class { static { __name(this, "MultiMap"); } constructor(elements4) { this.map = /* @__PURE__ */ new Map(); if (elements4) { for (const [key, value2] of elements4) { 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 values2 = this.map.get(key); if (values2) { const index = values2.indexOf(value2); if (index >= 0) { if (values2.length === 1) { this.map.delete(key); } else { values2.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) { var _a; return (_a = this.map.get(key)) !== null && _a !== void 0 ? _a : []; } /** * 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 values2 = this.map.get(key); if (values2) { return values2.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, values2) { if (this.map.has(key)) { this.map.get(key).push(...values2); } else { this.map.set(key, Array.from(values2)); } 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"); } get size() { return this.map.size; } constructor(elements4) { this.map = /* @__PURE__ */ new Map(); this.inverse = /* @__PURE__ */ new Map(); if (elements4) { for (const [key, value2] of elements4) { 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; } }; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/references/scope-computation.js var DefaultScopeComputation; var init_scope_computation = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/references/scope-computation.js"() { "use strict"; init_cancellation(); init_ast_utils(); init_collections(); init_promise_utils(); DefaultScopeComputation = class { static { __name(this, "DefaultScopeComputation"); } constructor(services) { this.nameProvider = services.references.NameProvider; this.descriptions = services.workspace.AstNodeDescriptionProvider; } async computeExports(document2, cancelToken = cancellation_exports.CancellationToken.None) { return this.computeExportsForNode(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 `OperationCanceled` if a user action occurs during execution. * @returns A list of {@link AstNodeDescription AstNodeDescriptions} to be published to index. */ async computeExportsForNode(parentNode, document2, children2 = streamContents, cancelToken = cancellation_exports.CancellationToken.None) { const exports2 = []; this.exportNode(parentNode, exports2, document2); for (const node2 of children2(parentNode)) { await interruptAndCheck(cancelToken); this.exportNode(node2, exports2, document2); } return exports2; } /** * Add 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. */ exportNode(node2, exports2, document2) { const name = this.nameProvider.getName(node2); if (name) { exports2.push(this.descriptions.createDescription(node2, name, document2)); } } async computeLocalScopes(document2, cancelToken = cancellation_exports.CancellationToken.None) { const rootNode = document2.parseResult.value; const scopes = new MultiMap(); for (const node2 of streamAllContents(rootNode)) { await interruptAndCheck(cancelToken); this.processNode(node2, document2, scopes); } return scopes; } /** * Process a single node during scopes computation. The default implementation makes the node visible * in the subtree of its container (if the node has a name). Override this method to change this, * e.g. by increasing the visibility to a higher level in the AST. */ processNode(node2, document2, scopes) { const container2 = node2.$container; if (container2) { const name = this.nameProvider.getName(node2); if (name) { scopes.add(container2, this.descriptions.createDescription(node2, name, document2)); } } } }; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/references/scope.js var StreamScope, MapScope, EMPTY_SCOPE; var init_scope = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/references/scope.js"() { "use strict"; init_stream(); StreamScope = class { static { __name(this, "StreamScope"); } constructor(elements4, outerScope, options3) { var _a; this.elements = elements4; this.outerScope = outerScope; this.caseInsensitive = (_a = options3 === null || options3 === void 0 ? void 0 : options3.caseInsensitive) !== null && _a !== void 0 ? _a : false; } getAllElements() { if (this.outerScope) { return this.elements.concat(this.outerScope.getAllElements()); } else { return this.elements; } } getElement(name) { const local = this.caseInsensitive ? this.elements.find((e3) => e3.name.toLowerCase() === name.toLowerCase()) : this.elements.find((e3) => e3.name === name); if (local) { return local; } if (this.outerScope) { return this.outerScope.getElement(name); } return void 0; } }; MapScope = class { static { __name(this, "MapScope"); } constructor(elements4, outerScope, options3) { var _a; this.elements = /* @__PURE__ */ new Map(); this.caseInsensitive = (_a = options3 === null || options3 === void 0 ? void 0 : options3.caseInsensitive) !== null && _a !== void 0 ? _a : false; for (const element3 of elements4) { 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; } getAllElements() { let elementStream = stream(this.elements.values()); if (this.outerScope) { elementStream = elementStream.concat(this.outerScope.getAllElements()); } return elementStream; } }; EMPTY_SCOPE = { getElement() { return void 0; }, getAllElements() { return EMPTY_STREAM; } }; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/utils/caching.js var DisposableCache, SimpleCache, ContextCache, DocumentCache, WorkspaceCache; var init_caching = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/utils/caching.js"() { "use strict"; DisposableCache = class { static { __name(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"); } 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"); } constructor(converter) { super(); this.cache = /* @__PURE__ */ new Map(); this.converter = converter !== null && converter !== void 0 ? 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"); } constructor(sharedServices) { super((uri) => uri.toString()); this.onDispose(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"); } constructor(sharedServices) { super(); this.onDispose(sharedServices.workspace.DocumentBuilder.onUpdate(() => { this.clear(); })); } }; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/references/scope-provider.js var DefaultScopeProvider; var init_scope_provider = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/references/scope-provider.js"() { "use strict"; init_scope(); init_ast_utils(); init_stream(); init_caching(); DefaultScopeProvider = class { static { __name(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 precomputed = getDocument(context.container).precomputedScopes; if (precomputed) { let currentNode = context.container; do { const allDescriptions = precomputed.get(currentNode); if (allDescriptions.length > 0) { scopes.push(stream(allDescriptions).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(elements4, outerScope, options3) { return new StreamScope(stream(elements4), outerScope, options3); } /** * 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(elements4, outerScope, options3) { const s2 = stream(elements4).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, options3); } /** * Create a global scope filtered for the given reference type. */ getGlobalScope(referenceType, _context) { return this.globalScopeCache.get(referenceType, () => new MapScope(this.indexManager.allElements(referenceType))); } }; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/serializer/json-serializer.js function isAstNodeWithComment(node2) { return typeof node2.$comment === "string"; } function isIntermediateReference(obj) { return typeof obj === "object" && !!obj && ("$ref" in obj || "$error" in obj); } var DefaultJsonSerializer; var init_json_serializer = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/serializer/json-serializer.js"() { "use strict"; init_esm2(); init_syntax_tree(); init_ast_utils(); init_grammar_utils(); __name(isAstNodeWithComment, "isAstNodeWithComment"); __name(isIntermediateReference, "isIntermediateReference"); DefaultJsonSerializer = class { static { __name(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, options3 = {}) { const specificReplacer = options3 === null || options3 === void 0 ? void 0 : options3.replacer; const defaultReplacer = /* @__PURE__ */ __name((key, value2) => this.replacer(key, value2, options3), "defaultReplacer"); const replacer = specificReplacer ? (key, value2) => specificReplacer(key, value2, defaultReplacer) : defaultReplacer; try { this.currentDocument = getDocument(node2); return JSON.stringify(node2, replacer, options3 === null || options3 === void 0 ? void 0 : options3.space); } finally { this.currentDocument = void 0; } } deserialize(content, options3 = {}) { const root4 = JSON.parse(content); this.linkNode(root4, root4, options3); return root4; } replacer(key, value2, { refText, sourceText, textRegions, comments, uriConverter }) { var _a, _b, _c, _d; 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, value2); } else { targetUri = targetDocument.uri.toString(); } } const targetPath = this.astNodeLocator.getAstNodePath(refValue); return { $ref: `${targetUri}#${targetPath}`, $refText }; } else { return { $error: (_b = (_a = value2.error) === null || _a === void 0 ? void 0 : _a.message) !== null && _b !== void 0 ? _b : "Could not resolve reference", $refText }; } } else if (isAstNode(value2)) { let astNode = void 0; if (textRegions) { astNode = this.addAstNodeRegionWithAssignmentsTo(Object.assign({}, value2)); if ((!key || value2.$document) && (astNode === null || astNode === void 0 ? void 0 : astNode.$textRegion)) { astNode.$textRegion.documentURI = (_c = this.currentDocument) === null || _c === void 0 ? void 0 : _c.uri.toString(); } } if (sourceText && !key) { astNode !== null && astNode !== void 0 ? astNode : astNode = Object.assign({}, value2); astNode.$sourceText = (_d = value2.$cstNode) === null || _d === void 0 ? void 0 : _d.text; } if (comments) { astNode !== null && astNode !== void 0 ? astNode : astNode = Object.assign({}, value2); const comment2 = this.commentProvider.getComment(value2); if (comment2) { astNode.$comment = comment2.replace(/\r/g, ""); } } return astNode !== null && astNode !== void 0 ? astNode : value2; } else { return value2; } } addAstNodeRegionWithAssignmentsTo(node2) { const createDocumentSegment = /* @__PURE__ */ __name((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, root4, options3, 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, root4, element3, options3); } else if (isAstNode(element3)) { this.linkNode(element3, root4, options3, node2, propertyName, index); } } } else if (isIntermediateReference(item)) { node2[propertyName] = this.reviveReference(node2, propertyName, root4, item, options3); } else if (isAstNode(item)) { this.linkNode(item, root4, options3, node2, propertyName); } } const mutable = node2; mutable.$container = container2; mutable.$containerProperty = containerProperty; mutable.$containerIndex = containerIndex; } reviveReference(container2, property2, root4, reference, options3) { let refText = reference.$refText; let error3 = reference.$error; if (reference.$ref) { const ref = this.getRefNode(root4, reference.$ref, options3.uriConverter); if (isAstNode(ref)) { if (!refText) { refText = this.nameProvider.getName(ref); } return { $refText: refText !== null && refText !== void 0 ? refText : "", ref }; } else { error3 = ref; } } if (error3) { const ref = { $refText: refText !== null && refText !== void 0 ? refText : "" }; ref.error = { container: container2, property: property2, message: error3, reference: ref }; return ref; } else { return void 0; } } getRefNode(root4, uri, uriConverter) { try { const fragmentIndex = uri.indexOf("#"); if (fragmentIndex === 0) { const node3 = this.astNodeLocator.getAstNode(root4, uri.substring(1)); if (!node3) { return "Could not resolve path: " + uri; } return node3; } if (fragmentIndex < 0) { const documentUri2 = uriConverter ? uriConverter(uri) : URI2.parse(uri); const document3 = this.langiumDocuments.getDocument(documentUri2); if (!document3) { return "Could not find document for URI: " + uri; } return document3.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); } } }; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/service-registry.js var DefaultServiceRegistry; var init_service_registry = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/service-registry.js"() { "use strict"; init_uri_utils(); DefaultServiceRegistry = class { static { __name(this, "DefaultServiceRegistry"); } register(language) { if (!this.singleton && !this.map) { this.singleton = language; return; } if (!this.map) { this.map = {}; if (this.singleton) { for (const ext of this.singleton.LanguageMetaData.fileExtensions) { this.map[ext] = this.singleton; } this.singleton = void 0; } } for (const ext of language.LanguageMetaData.fileExtensions) { if (this.map[ext] !== void 0 && this.map[ext] !== language) { console.warn(`The file extension ${ext} is used by multiple languages. It is now assigned to '${language.LanguageMetaData.languageId}'.`); } this.map[ext] = language; } } getServices(uri) { if (this.singleton !== void 0) { return this.singleton; } if (this.map === void 0) { throw new Error("The service registry is empty. Use `register` to register the services of a language."); } const ext = UriUtils.extname(uri); const services = this.map[ext]; if (!services) { throw new Error(`The service registry contains no services for the extension '${ext}'.`); } return services; } get all() { if (this.singleton !== void 0) { return [this.singleton]; } if (this.map !== void 0) { return Object.values(this.map); } return []; } }; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/validation/validation-registry.js function diagnosticData(code) { return { code }; } var ValidationCategory, ValidationRegistry; var init_validation_registry = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/validation/validation-registry.js"() { "use strict"; init_collections(); init_promise_utils(); init_stream(); __name(diagnosticData, "diagnosticData"); (function(ValidationCategory2) { ValidationCategory2.all = ["fast", "slow", "built-in"]; })(ValidationCategory || (ValidationCategory = {})); ValidationRegistry = class { static { __name(this, "ValidationRegistry"); } constructor(services) { this.entries = new MultiMap(); 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 category Optional category for the validation checks (defaults to `'fast'`). * @param thisObj Optional object to be used as `this` when calling the validation check functions. */ 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."); } 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); } } } wrapValidationException(check, thisObj) { return async (node2, accept, cancelToken) => { try { await check.call(thisObj, node2, accept, cancelToken); } catch (err) { if (isOperationCancelled(err)) { throw err; } console.error("An error occurred during validation:", err); const message = err instanceof Error ? err.message : String(err); if (err instanceof Error && err.stack) { console.error(err.stack); } accept("error", "An error occurred during validation: " + message, { 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); } }; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/validation/document-validator.js 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 !== null && cstNode !== void 0 ? 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); } } var DefaultDocumentValidator, DocumentValidator; var init_document_validator = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/validation/document-validator.js"() { "use strict"; init_cancellation(); init_grammar_utils(); init_ast_utils(); init_cst_utils(); init_promise_utils(); init_validation_registry(); DefaultDocumentValidator = class { static { __name(this, "DefaultDocumentValidator"); } constructor(services) { this.validationRegistry = services.validation.ValidationRegistry; this.metadata = services.LanguageMetaData; } async validateDocument(document2, options3 = {}, cancelToken = cancellation_exports.CancellationToken.None) { const parseResult = document2.parseResult; const diagnostics = []; await interruptAndCheck(cancelToken); if (!options3.categories || options3.categories.includes("built-in")) { this.processLexingErrors(parseResult, diagnostics, options3); if (options3.stopAfterLexingErrors && diagnostics.some((d2) => { var _a; return ((_a = d2.data) === null || _a === void 0 ? void 0 : _a.code) === DocumentValidator.LexingError; })) { return diagnostics; } this.processParsingErrors(parseResult, diagnostics, options3); if (options3.stopAfterParsingErrors && diagnostics.some((d2) => { var _a; return ((_a = d2.data) === null || _a === void 0 ? void 0 : _a.code) === DocumentValidator.ParsingError; })) { return diagnostics; } this.processLinkingErrors(document2, diagnostics, options3); if (options3.stopAfterLinkingErrors && diagnostics.some((d2) => { var _a; return ((_a = d2.data) === null || _a === void 0 ? void 0 : _a.code) === DocumentValidator.LinkingError; })) { return diagnostics; } } try { diagnostics.push(...await this.validateAst(parseResult.value, options3, 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) { for (const lexerError of parseResult.lexerErrors) { const diagnostic = { severity: toDiagnosticSeverity("error"), range: { start: { line: lexerError.line - 1, character: lexerError.column - 1 }, end: { line: lexerError.line - 1, character: lexerError.column + lexerError.length - 1 } }, message: lexerError.message, data: diagnosticData(DocumentValidator.LexingError), 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.container, property: linkingError.property, index: linkingError.index, data: { code: DocumentValidator.LinkingError, containerType: linkingError.container.$type, property: linkingError.property, refText: linkingError.reference.$refText } }; diagnostics.push(this.toDiagnostic("error", linkingError.message, info2)); } } } async validateAst(rootNode, options3, cancelToken = cancellation_exports.CancellationToken.None) { const validationItems = []; const acceptor = /* @__PURE__ */ __name((severity, message, info2) => { validationItems.push(this.toDiagnostic(severity, message, info2)); }, "acceptor"); await Promise.all(streamAst(rootNode).map(async (node2) => { await interruptAndCheck(cancelToken); const checks = this.validationRegistry.getChecks(node2.$type, options3.categories); for (const check of checks) { await check(node2, acceptor, cancelToken); } })); return validationItems; } 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"); __name(toDiagnosticSeverity, "toDiagnosticSeverity"); (function(DocumentValidator2) { DocumentValidator2.LexingError = "lexing-error"; DocumentValidator2.ParsingError = "parsing-error"; DocumentValidator2.LinkingError = "linking-error"; })(DocumentValidator || (DocumentValidator = {})); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/workspace/ast-descriptions.js var DefaultAstNodeDescriptionProvider, DefaultReferenceDescriptionProvider; var init_ast_descriptions = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/workspace/ast-descriptions.js"() { "use strict"; init_cancellation(); init_syntax_tree(); init_ast_utils(); init_cst_utils(); init_promise_utils(); init_uri_utils(); DefaultAstNodeDescriptionProvider = class { static { __name(this, "DefaultAstNodeDescriptionProvider"); } constructor(services) { this.astNodeLocator = services.workspace.AstNodeLocator; this.nameProvider = services.references.NameProvider; } createDescription(node2, name, document2 = getDocument(node2)) { name !== null && name !== void 0 ? 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__ */ __name(() => { var _a; return nameNodeSegment !== null && nameNodeSegment !== void 0 ? nameNodeSegment : nameNodeSegment = toDocumentSegment((_a = this.nameProvider.getNameNode(node2)) !== null && _a !== void 0 ? _a : node2.$cstNode); }, "nameSegmentGetter"); return { node: node2, name, get nameSegment() { return nameSegmentGetter(); }, selectionSegment: toDocumentSegment(node2.$cstNode), type: node2.$type, documentUri: document2.uri, path: path4 }; } }; DefaultReferenceDescriptionProvider = class { static { __name(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).filter((refInfo) => !isLinkingError(refInfo)).forEach((refInfo) => { const description = this.createDescription(refInfo); if (description) { descr.push(description); } }); } return descr; } createDescription(refInfo) { const targetNodeDescr = refInfo.reference.$nodeDescription; const refCstNode = refInfo.reference.$refNode; if (!targetNodeDescr || !refCstNode) { return void 0; } const docUri = getDocument(refInfo.container).uri; return { sourceUri: docUri, sourcePath: this.nodeLocator.getAstNodePath(refInfo.container), targetUri: targetNodeDescr.documentUri, targetPath: targetNodeDescr.path, segment: toDocumentSegment(refCstNode), local: UriUtils.equals(targetNodeDescr.documentUri, docUri) }; } }; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/workspace/ast-node-locator.js var DefaultAstNodeLocator; var init_ast_node_locator = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/workspace/ast-node-locator.js"() { "use strict"; DefaultAstNodeLocator = class { static { __name(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 property2 = currentValue.substring(0, propertyIndex); const arrayIndex = parseInt(currentValue.substring(propertyIndex + 1)); const array4 = previousValue[property2]; return array4 === null || array4 === void 0 ? void 0 : array4[arrayIndex]; } return previousValue[currentValue]; }, node2); } }; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/workspace/configuration.js var DefaultConfigurationProvider; var init_configuration = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/workspace/configuration.js"() { "use strict"; init_promise_utils(); DefaultConfigurationProvider = class { static { __name(this, "DefaultConfigurationProvider"); } constructor(services) { this._ready = new Deferred(); this.settings = {}; this.workspaceConfig = false; this.serviceRegistry = services.ServiceRegistry; } get ready() { return this._ready.promise; } initialize(params) { var _a, _b; this.workspaceConfig = (_b = (_a = params.capabilities.workspace) === null || _a === void 0 ? void 0 : _a.configuration) !== null && _b !== void 0 ? _b : 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((conf7, idx) => { this.updateSectionConfiguration(conf7.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>` */ updateConfiguration(change2) { if (!change2.settings) { return; } Object.keys(change2.settings).forEach((section) => { this.updateSectionConfiguration(section, change2.settings[section]); }); } 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}`; } }; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/utils/disposable.js var Disposable; var init_disposable = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/utils/disposable.js"() { "use strict"; (function(Disposable2) { function create2(callback) { return { dispose: /* @__PURE__ */ __name(async () => await callback(), "dispose") }; } __name(create2, "create"); Disposable2.create = create2; })(Disposable || (Disposable = {})); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/workspace/document-builder.js var DefaultDocumentBuilder; var init_document_builder = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/workspace/document-builder.js"() { "use strict"; init_cancellation(); init_disposable(); init_collections(); init_promise_utils(); init_stream(); init_validation_registry(); init_documents(); DefaultDocumentBuilder = class { static { __name(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.buildState = /* @__PURE__ */ new Map(); this.documentBuildWaiters = /* @__PURE__ */ new Map(); this.currentState = DocumentState.Changed; this.langiumDocuments = services.workspace.LangiumDocuments; this.langiumDocumentFactory = services.workspace.LangiumDocumentFactory; this.indexManager = services.workspace.IndexManager; this.serviceRegistry = services.ServiceRegistry; } async build(documents2, options3 = {}, cancelToken = cancellation_exports.CancellationToken.None) { var _a, _b; for (const document2 of documents2) { const key = document2.uri.toString(); if (document2.state === DocumentState.Validated) { if (typeof options3.validation === "boolean" && options3.validation) { document2.state = DocumentState.IndexedReferences; document2.diagnostics = void 0; this.buildState.delete(key); } else if (typeof options3.validation === "object") { const buildState2 = this.buildState.get(key); const previousCategories = (_a = buildState2 === null || buildState2 === void 0 ? void 0 : buildState2.result) === null || _a === void 0 ? void 0 : _a.validationChecks; if (previousCategories) { const newCategories = (_b = options3.validation.categories) !== null && _b !== void 0 ? _b : ValidationCategory.all; const categories = newCategories.filter((c3) => !previousCategories.includes(c3)); if (categories.length > 0) { this.buildState.set(key, { completed: false, options: { validation: Object.assign(Object.assign({}, options3.validation), { categories }) }, result: buildState2.result }); document2.state = DocumentState.IndexedReferences; } } } } else { this.buildState.delete(key); } } this.currentState = DocumentState.Changed; await this.emitUpdate(documents2.map((e3) => e3.uri), []); await this.buildDocuments(documents2, options3, cancelToken); } async update(changed, deleted, cancelToken = cancellation_exports.CancellationToken.None) { this.currentState = DocumentState.Changed; for (const deletedUri of deleted) { this.langiumDocuments.deleteDocument(deletedUri); this.buildState.delete(deletedUri.toString()); this.indexManager.remove(deletedUri); } for (const changedUri of changed) { const invalidated = this.langiumDocuments.invalidateDocument(changedUri); if (!invalidated) { const newDocument = this.langiumDocumentFactory.fromModel({ $type: "INVALID" }, changedUri); newDocument.state = DocumentState.Changed; this.langiumDocuments.addDocument(newDocument); } this.buildState.delete(changedUri.toString()); } const allChangedUris = stream(changed).concat(deleted).map((uri) => uri.toString()).toSet(); this.langiumDocuments.all.filter((doc) => !allChangedUris.has(doc.uri.toString()) && this.shouldRelink(doc, allChangedUris)).forEach((doc) => { const linker = this.serviceRegistry.getServices(doc.uri).references.Linker; linker.unlink(doc); doc.state = Math.min(doc.state, DocumentState.ComputedScopes); doc.diagnostics = void 0; }); await this.emitUpdate(changed, deleted); await interruptAndCheck(cancelToken); const rebuildDocuments = this.langiumDocuments.all.filter((doc) => { var _a; return doc.state < DocumentState.Linked || !((_a = this.buildState.get(doc.uri.toString())) === null || _a === void 0 ? void 0 : _a.completed); }).toArray(); await this.buildDocuments(rebuildDocuments, this.updateBuildOptions, cancelToken); } async emitUpdate(changed, deleted) { await Promise.all(this.updateListeners.map((listener) => listener(changed, deleted))); } /** * 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); } }); } /** * 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. */ async buildDocuments(documents2, options3, cancelToken) { this.prepareBuild(documents2, options3); await this.runCancelable(documents2, DocumentState.Parsed, cancelToken, (doc) => this.langiumDocumentFactory.update(doc, cancelToken)); await this.runCancelable(documents2, DocumentState.IndexedContent, cancelToken, (doc) => this.indexManager.updateContent(doc, cancelToken)); await this.runCancelable(documents2, DocumentState.ComputedScopes, cancelToken, async (doc) => { const scopeComputation = this.serviceRegistry.getServices(doc.uri).references.ScopeComputation; doc.precomputedScopes = await scopeComputation.computeLocalScopes(doc, cancelToken); }); await this.runCancelable(documents2, DocumentState.Linked, cancelToken, (doc) => { const linker = this.serviceRegistry.getServices(doc.uri).references.Linker; return linker.link(doc, cancelToken); }); await this.runCancelable(documents2, DocumentState.IndexedReferences, cancelToken, (doc) => this.indexManager.updateReferences(doc, cancelToken)); const toBeValidated = documents2.filter((doc) => this.shouldValidate(doc)); await this.runCancelable(toBeValidated, DocumentState.Validated, cancelToken, (doc) => this.validate(doc, cancelToken)); for (const doc of documents2) { const state5 = this.buildState.get(doc.uri.toString()); if (state5) { state5.completed = true; } } } prepareBuild(documents2, options3) { for (const doc of documents2) { const key = doc.uri.toString(); const state5 = this.buildState.get(key); if (!state5 || state5.completed) { this.buildState.set(key, { completed: false, options: options3, result: state5 === null || state5 === void 0 ? void 0 : state5.result }); } } } async runCancelable(documents2, targetState, cancelToken, callback) { const filtered = documents2.filter((e3) => e3.state < targetState); for (const document2 of filtered) { await interruptAndCheck(cancelToken); await callback(document2); document2.state = targetState; } await this.notifyBuildPhase(filtered, targetState, cancelToken); this.currentState = targetState; } onBuildPhase(targetState, callback) { this.buildPhaseListeners.add(targetState, callback); return Disposable.create(() => { this.buildPhaseListeners.delete(targetState, callback); }); } waitUntil(state5, uriOrToken, cancelToken) { let uri = void 0; if (uriOrToken && "path" in uriOrToken) { uri = uriOrToken; } else { cancelToken = uriOrToken; } cancelToken !== null && cancelToken !== void 0 ? cancelToken : cancelToken = cancellation_exports.CancellationToken.None; if (uri) { const document2 = this.langiumDocuments.getDocument(uri); if (document2 && document2.state > state5) { return Promise.resolve(uri); } } if (this.currentState >= state5) { return Promise.resolve(void 0); } else if (cancelToken.isCancellationRequested) { return Promise.reject(OperationCancelled); } return new Promise((resolve3, reject3) => { const buildDisposable = this.onBuildPhase(state5, () => { buildDisposable.dispose(); cancelDisposable.dispose(); if (uri) { const document2 = this.langiumDocuments.getDocument(uri); resolve3(document2 === null || document2 === void 0 ? void 0 : document2.uri); } else { resolve3(void 0); } }); const cancelDisposable = cancelToken.onCancellationRequested(() => { buildDisposable.dispose(); cancelDisposable.dispose(); reject3(OperationCancelled); }); }); } async notifyBuildPhase(documents2, state5, cancelToken) { if (documents2.length === 0) { return; } const listeners = this.buildPhaseListeners.get(state5); for (const listener of listeners) { await interruptAndCheck(cancelToken); await listener(documents2, cancelToken); } } /** * 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) { var _a, _b; const validator = this.serviceRegistry.getServices(document2.uri).validation.DocumentValidator; const validationSetting = this.getBuildOptions(document2).validation; const options3 = typeof validationSetting === "object" ? validationSetting : void 0; const diagnostics = await validator.validateDocument(document2, options3, cancelToken); if (document2.diagnostics) { document2.diagnostics.push(...diagnostics); } else { document2.diagnostics = diagnostics; } const state5 = this.buildState.get(document2.uri.toString()); if (state5) { (_a = state5.result) !== null && _a !== void 0 ? _a : state5.result = {}; const newCategories = (_b = options3 === null || options3 === void 0 ? void 0 : options3.categories) !== null && _b !== void 0 ? _b : ValidationCategory.all; if (state5.result.validationChecks) { state5.result.validationChecks.push(...newCategories); } else { state5.result.validationChecks = [...newCategories]; } } } getBuildOptions(document2) { var _a, _b; return (_b = (_a = this.buildState.get(document2.uri.toString())) === null || _a === void 0 ? void 0 : _a.options) !== null && _b !== void 0 ? _b : {}; } }; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/workspace/index-manager.js var DefaultIndexManager; var init_index_manager = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/workspace/index-manager.js"() { "use strict"; init_ast_utils(); init_caching(); init_cancellation(); init_stream(); init_uri_utils(); DefaultIndexManager = class { static { __name(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) { var _a; if (!nodeType3) { return (_a = this.symbolIndex.get(uri)) !== null && _a !== void 0 ? _a : []; } const descriptions = this.symbolByTypeIndex.get(uri, nodeType3, () => { var _a2; const allFileDescriptions = (_a2 = this.symbolIndex.get(uri)) !== null && _a2 !== void 0 ? _a2 : []; return allFileDescriptions.filter((e3) => this.astReflection.isSubtype(e3.type, nodeType3)); }); return descriptions; } remove(uri) { const uriString = uri.toString(); this.symbolIndex.delete(uriString); this.symbolByTypeIndex.clear(uriString); 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.computeExports(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())); } }; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/workspace/workspace-manager.js var DefaultWorkspaceManager; var init_workspace_manager = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/workspace/workspace-manager.js"() { "use strict"; init_cancellation(); init_promise_utils(); init_uri_utils(); DefaultWorkspaceManager = class { static { __name(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; } initialize(params) { var _a; this.folders = (_a = params.workspaceFolders) !== null && _a !== void 0 ? _a : void 0; } initialized(_params) { return this.mutex.write((token2) => { var _a; return this.initializeWorkspace((_a = this.folders) !== null && _a !== void 0 ? _a : [], token2); }); } async initializeWorkspace(folders, cancelToken = cancellation_exports.CancellationToken.None) { const documents2 = await this.performStartup(folders); await interruptAndCheck(cancelToken); await this.documentBuilder.build(documents2, 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 fileExtensions = this.serviceRegistry.all.flatMap((e3) => e3.LanguageMetaData.fileExtensions); const documents2 = []; const collector = /* @__PURE__ */ __name((document2) => { documents2.push(document2); if (!this.langiumDocuments.hasDocument(document2.uri)) { this.langiumDocuments.addDocument(document2); } }, "collector"); await this.loadAdditionalDocuments(folders, collector); await Promise.all(folders.map((wf) => [wf, this.getRootFolder(wf)]).map(async (entry) => this.traverseFolder(...entry, fileExtensions, collector))); this._ready.resolve(); return documents2; } /** * 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 collector. */ async traverseFolder(workspaceFolder, folderPath, fileExtensions, collector) { const content = await this.fileSystemProvider.readDirectory(folderPath); await Promise.all(content.map(async (entry) => { if (this.includeEntry(workspaceFolder, entry, fileExtensions)) { if (entry.isDirectory) { await this.traverseFolder(workspaceFolder, entry.uri, fileExtensions, collector); } else if (entry.isFile) { const document2 = await this.langiumDocuments.getOrCreateDocument(entry.uri); collector(document2); } } })); } /** * Determine whether the given folder entry shall be included while indexing the workspace. */ includeEntry(_workspaceFolder, entry, fileExtensions) { const name = UriUtils.basename(entry.uri); if (name.startsWith(".")) { return false; } if (entry.isDirectory) { return name !== "node_modules" && name !== "out"; } else if (entry.isFile) { const extname = UriUtils.extname(entry.uri); return fileExtensions.includes(extname); } return false; } }; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/parser/lexer.js 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); } var DefaultLexer; var init_lexer2 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/parser/lexer.js"() { "use strict"; init_api5(); DefaultLexer = class { static { __name(this, "DefaultLexer"); } constructor(services) { const tokens2 = services.parser.TokenBuilder.buildTokens(services.Grammar, { caseInsensitive: services.LanguageMetaData.caseInsensitive }); this.tokenTypes = this.toTokenTypeDictionary(tokens2); const lexerTokens = isTokenTypeDictionary(tokens2) ? Object.values(tokens2) : tokens2; this.chevrotainLexer = new Lexer2(lexerTokens, { positionTracking: "full" }); } get definition() { return this.tokenTypes; } tokenize(text3) { var _a; const chevrotainResult = this.chevrotainLexer.tokenize(text3); return { tokens: chevrotainResult.tokens, errors: chevrotainResult.errors, hidden: (_a = chevrotainResult.groups.hidden) !== null && _a !== void 0 ? _a : [] }; } 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"); __name(isIMultiModeLexerDefinition, "isIMultiModeLexerDefinition"); __name(isTokenTypeDictionary, "isTokenTypeDictionary"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/documentation/jsdoc.js function parseJSDoc(node2, start3, options3) { let opts; let position5; if (typeof node2 === "string") { position5 = start3; opts = options3; } 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, options3) { const normalizedOptions = normalizeOptions(options3); const lines = getLines(node2); if (lines.length === 0) { return false; } const first3 = lines[0]; const last3 = lines[lines.length - 1]; const firstRegex = normalizedOptions.start; const lastRegex = normalizedOptions.end; return Boolean(firstRegex === null || firstRegex === void 0 ? void 0 : firstRegex.exec(first3)) && Boolean(lastRegex === null || lastRegex === void 0 ? void 0 : lastRegex.exec(last3)); } 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) { var _a, _b, _c; const tokens2 = []; let currentLine = context.position.line; let currentCharacter = context.position.character; for (let i2 = 0; i2 < context.lines.length; i2++) { const first3 = i2 === 0; const last3 = i2 === context.lines.length - 1; let line2 = context.lines[i2]; let index = 0; if (first3 && context.options.start) { const match2 = (_a = context.options.start) === null || _a === void 0 ? void 0 : _a.exec(line2); if (match2) { index = match2.index + match2[0].length; } } else { const match2 = (_b = context.options.line) === null || _b === void 0 ? void 0 : _b.exec(line2); if (match2) { index = match2.index + match2[0].length; } } if (last3) { const match2 = (_c = context.options.end) === null || _c === void 0 ? void 0 : _c.exec(line2); if (match2) { line2 = line2.substring(0, match2.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 match2 of tags2) { const matchIndex = match2.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 = match2[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 (match2.length === 4) { offset += match2[2].length; const value2 = match2[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 + match2[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 match2 = line2.substring(index).match(nonWhitespaceRegex); if (match2) { return index + match2.index; } else { return line2.length; } } function lastCharacter(line2) { const match2 = line2.match(whitespaceEndRegex); if (match2 && typeof match2.index === "number") { return match2.index; } return void 0; } function parseJSDocComment(context) { var _a, _b, _c, _d; const startPosition = Position.create(context.position.line, context.position.character); if (context.tokens.length === 0) { return new JSDocCommentImpl([], Range.create(startPosition, startPosition)); } const elements4 = []; while (context.index < context.tokens.length) { const element3 = parseJSDocElement(context, elements4[elements4.length - 1]); if (element3) { elements4.push(element3); } } const start3 = (_b = (_a = elements4[0]) === null || _a === void 0 ? void 0 : _a.range.start) !== null && _b !== void 0 ? _b : startPosition; const end2 = (_d = (_c = elements4[elements4.length - 1]) === null || _c === void 0 ? void 0 : _c.range.end) !== null && _d !== void 0 ? _d : startPosition; return new JSDocCommentImpl(elements4, Range.create(start3, end2)); } function parseJSDocElement(context, last3) { 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, last3); 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, inline2) { const tagToken = context.tokens[context.index++]; const name = tagToken.content.substring(1); const nextToken = context.tokens[context.index]; if ((nextToken === null || nextToken === void 0 ? void 0 : nextToken.type) === "text") { if (inline2) { const docLine = parseJSDocLine(context); return new JSDocTagImpl(name, new JSDocTextImpl([docLine], docLine.range), inline2, Range.create(tagToken.range.start, docLine.range.end)); } else { const textDoc = parseJSDocText(context); return new JSDocTagImpl(name, textDoc, inline2, Range.create(tagToken.range.start, textDoc.range.end)); } } else { const range3 = tagToken.range; return new JSDocTagImpl(name, new JSDocTextImpl([], range3), inline2, range3); } } function parseJSDocLine(context) { const token2 = context.tokens[context.index++]; return new JSDocLineImpl(token2.content, token2.range); } function normalizeOptions(options3) { if (!options3) { return normalizeOptions({ start: "/**", end: "*/", line: "*" }); } const { start: start3, end: end2, line: line2 } = options3; 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(tag2, content, options3) { var _a, _b; if (tag2 === "linkplain" || tag2 === "linkcode" || tag2 === "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 (tag2 === "linkcode" || tag2 === "link" && options3.link === "code") { display = `\`${display}\``; } const renderedLink = (_b = (_a = options3.renderLink) === null || _a === void 0 ? void 0 : _a.call(options3, content, display)) !== null && _b !== void 0 ? _b : renderLinkDefault(content, display); return renderedLink; } return void 0; } function renderLinkDefault(content, display) { try { URI2.parse(content, true); return `[${display}](${content})`; } catch (_a) { return content; } } function fillNewlines(text3) { if (text3.endsWith("\n")) { return "\n"; } else { return "\n\n"; } } var tagRegex, inlineTagRegex, nonWhitespaceRegex, whitespaceEndRegex, JSDocCommentImpl, JSDocTagImpl, JSDocTextImpl, JSDocLineImpl; var init_jsdoc = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/documentation/jsdoc.js"() { "use strict"; init_main(); init_regexp_utils(); init_uri_utils(); __name(parseJSDoc, "parseJSDoc"); __name(isJSDoc, "isJSDoc"); __name(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"); __name(buildInlineTokens, "buildInlineTokens"); nonWhitespaceRegex = /\S/; whitespaceEndRegex = /\s*$/; __name(skipWhitespace, "skipWhitespace"); __name(lastCharacter, "lastCharacter"); __name(parseJSDocComment, "parseJSDocComment"); __name(parseJSDocElement, "parseJSDocElement"); __name(appendEmptyLine, "appendEmptyLine"); __name(parseJSDocText, "parseJSDocText"); __name(parseJSDocInline, "parseJSDocInline"); __name(parseJSDocTag, "parseJSDocTag"); __name(parseJSDocLine, "parseJSDocLine"); __name(normalizeOptions, "normalizeOptions"); __name(normalizeOption, "normalizeOption"); JSDocCommentImpl = class { static { __name(this, "JSDocCommentImpl"); } constructor(elements4, range3) { this.elements = elements4; 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 text3 = element3.toString(); value2 += fillNewlines(value2) + text3; } } return value2.trim(); } toMarkdown(options3) { let value2 = ""; for (const element3 of this.elements) { if (value2.length === 0) { value2 = element3.toMarkdown(options3); } else { const text3 = element3.toMarkdown(options3); value2 += fillNewlines(value2) + text3; } } return value2.trim(); } }; JSDocTagImpl = class { static { __name(this, "JSDocTagImpl"); } constructor(name, content, inline2, range3) { this.name = name; this.content = content; this.inline = inline2; this.range = range3; } toString() { let text3 = `@${this.name}`; const content = this.content.toString(); if (this.content.inlines.length === 1) { text3 = `${text3} ${content}`; } else if (this.content.inlines.length > 1) { text3 = `${text3} ${content}`; } if (this.inline) { return `{${text3}}`; } else { return text3; } } toMarkdown(options3) { var _a, _b; return (_b = (_a = options3 === null || options3 === void 0 ? void 0 : options3.renderTag) === null || _a === void 0 ? void 0 : _a.call(options3, this)) !== null && _b !== void 0 ? _b : this.toMarkdownDefault(options3); } toMarkdownDefault(options3) { const content = this.content.toMarkdown(options3); if (this.inline) { const rendered = renderInlineTag(this.name, content, options3 !== null && options3 !== void 0 ? options3 : {}); if (typeof rendered === "string") { return rendered; } } let marker = ""; if ((options3 === null || options3 === void 0 ? void 0 : options3.tag) === "italic" || (options3 === null || options3 === void 0 ? void 0 : options3.tag) === void 0) { marker = "*"; } else if ((options3 === null || options3 === void 0 ? void 0 : options3.tag) === "bold") { marker = "**"; } else if ((options3 === null || options3 === void 0 ? void 0 : options3.tag) === "bold-italic") { marker = "***"; } let text3 = `${marker}@${this.name}${marker}`; if (this.content.inlines.length === 1) { text3 = `${text3} \u2014 ${content}`; } else if (this.content.inlines.length > 1) { text3 = `${text3} ${content}`; } if (this.inline) { return `{${text3}}`; } else { return text3; } } }; __name(renderInlineTag, "renderInlineTag"); __name(renderLinkDefault, "renderLinkDefault"); JSDocTextImpl = class { static { __name(this, "JSDocTextImpl"); } constructor(lines, range3) { this.inlines = lines; this.range = range3; } toString() { let text3 = ""; for (let i2 = 0; i2 < this.inlines.length; i2++) { const inline2 = this.inlines[i2]; const next3 = this.inlines[i2 + 1]; text3 += inline2.toString(); if (next3 && next3.range.start.line > inline2.range.start.line) { text3 += "\n"; } } return text3; } toMarkdown(options3) { let text3 = ""; for (let i2 = 0; i2 < this.inlines.length; i2++) { const inline2 = this.inlines[i2]; const next3 = this.inlines[i2 + 1]; text3 += inline2.toMarkdown(options3); if (next3 && next3.range.start.line > inline2.range.start.line) { text3 += "\n"; } } return text3; } }; JSDocLineImpl = class { static { __name(this, "JSDocLineImpl"); } constructor(text3, range3) { this.text = text3; this.range = range3; } toString() { return this.text; } toMarkdown() { return this.text; } }; __name(fillNewlines, "fillNewlines"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/documentation/documentation-provider.js var JSDocDocumentationProvider; var init_documentation_provider = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/documentation/documentation-provider.js"() { "use strict"; init_ast_utils(); init_jsdoc(); JSDocDocumentationProvider = class { static { __name(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__ */ __name((link3, display) => { return this.documentationLinkRenderer(node2, link3, display); }, "renderLink"), renderTag: /* @__PURE__ */ __name((tag2) => { return this.documentationTagRenderer(node2, tag2); }, "renderTag") }); } return void 0; } documentationLinkRenderer(node2, name, display) { var _a; const description = (_a = this.findNameInPrecomputedScopes(node2, name)) !== null && _a !== void 0 ? _a : 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, _tag2) { return void 0; } findNameInPrecomputedScopes(node2, name) { const document2 = getDocument(node2); const precomputed = document2.precomputedScopes; if (!precomputed) { return void 0; } let currentNode = node2; do { const allDescriptions = precomputed.get(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; } }; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/documentation/comment-provider.js var DefaultCommentProvider; var init_comment_provider = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/documentation/comment-provider.js"() { "use strict"; init_json_serializer(); init_cst_utils(); DefaultCommentProvider = class { static { __name(this, "DefaultCommentProvider"); } constructor(services) { this.grammarConfig = () => services.parser.GrammarConfig; } getComment(node2) { var _a; if (isAstNodeWithComment(node2)) { return node2.$comment; } return (_a = findCommentNode(node2.$cstNode, this.grammarConfig().multilineCommentRules)) === null || _a === void 0 ? void 0 : _a.text; } }; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/utils/event.js var event_exports = {}; var init_event3 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/utils/event.js"() { "use strict"; __reExport(event_exports, __toESM(require_events(), 1)); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/parser/async-parser.js var DefaultAsyncParser, AbstractThreadedAsyncParser, ParserWorker; var init_async_parser = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/parser/async-parser.js"() { "use strict"; init_promise_utils(); init_event3(); DefaultAsyncParser = class { static { __name(this, "DefaultAsyncParser"); } constructor(services) { this.syncParser = services.parser.LangiumParser; } parse(text3) { return Promise.resolve(this.syncParser.parse(text3)); } }; AbstractThreadedAsyncParser = class { static { __name(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(text3, 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(text3).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"); } 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(text3) { if (this._parsing) { throw new Error("Parser worker is busy"); } this._parsing = true; this.deferred = new Deferred(); this.sendMessage(text3); return this.deferred.promise; } }; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/workspace/workspace-lock.js var DefaultWorkspaceLock; var init_workspace_lock = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/workspace/workspace-lock.js"() { "use strict"; init_cancellation(); init_promise_utils(); DefaultWorkspaceLock = class { static { __name(this, "DefaultWorkspaceLock"); } constructor() { this.previousTokenSource = new cancellation_exports.CancellationTokenSource(); this.writeQueue = []; this.readQueue = []; this.done = true; } write(action) { this.cancelWrite(); const tokenSource = new cancellation_exports.CancellationTokenSource(); this.previousTokenSource = tokenSource; return this.enqueue(this.writeQueue, action, tokenSource.token); } read(action) { return this.enqueue(this.readQueue, action); } enqueue(queue, action, cancellationToken) { const deferred = new Deferred(); const entry = { action, deferred, cancellationToken: cancellationToken !== null && cancellationToken !== void 0 ? cancellationToken : cancellation_exports.CancellationToken.None }; queue.push(entry); this.performNextOperation(); return deferred.promise; } async performNextOperation() { if (!this.done) { return; } const entries = []; if (this.writeQueue.length > 0) { entries.push(this.writeQueue.shift()); } else if (this.readQueue.length > 0) { entries.push(...this.readQueue.splice(0, this.readQueue.length)); } else { return; } this.done = false; await Promise.all(entries.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(); } }; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/serializer/hydrator.js var DefaultHydrator; var init_hydrator = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/serializer/hydrator.js"() { "use strict"; init_cst_node_builder(); init_ast(); init_syntax_tree(); init_ast_utils(); init_collections(); init_cst_utils(); DefaultHydrator = class { static { __name(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 { // We need to create shallow copies of the errors // The original errors inherit from the `Error` class, which is not transferable across worker threads lexerErrors: result.lexerErrors.map((e3) => Object.assign({}, e3)), parserErrors: result.parserErrors.map((e3) => Object.assign({}, e3)), value: this.dehydrateAstNode(result.value, this.createDehyrationContext(result.value)) }; } 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, 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 root4; if (node2.$cstNode) { for (const cstNode of streamCst(node2.$cstNode)) { let cst; if ("fullText" in cstNode) { cst = new RootCstNodeImpl(cstNode.fullText); root4 = 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 = root4; } } } 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 (this.grammarElementIdMap.size === 0) { this.createGrammarElementIdMap(); } return this.grammarElementIdMap.get(node2); } getGrammarElement(id28) { if (this.grammarElementIdMap.size === 0) { this.createGrammarElementIdMap(); } const element3 = this.grammarElementIdMap.getKey(id28); if (element3) { return element3; } else { throw new Error("Invalid grammar element id: " + id28); } } createGrammarElementIdMap() { let id28 = 0; for (const element3 of streamAst(this.grammar)) { if (isAbstractElement(element3)) { this.grammarElementIdMap.set(element3, id28++); } } } }; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/default-module.js function createDefaultCoreModule(context) { return { documentation: { CommentProvider: /* @__PURE__ */ __name((services) => new DefaultCommentProvider(services), "CommentProvider"), DocumentationProvider: /* @__PURE__ */ __name((services) => new JSDocDocumentationProvider(services), "DocumentationProvider") }, parser: { AsyncParser: /* @__PURE__ */ __name((services) => new DefaultAsyncParser(services), "AsyncParser"), GrammarConfig: /* @__PURE__ */ __name((services) => createGrammarConfig(services), "GrammarConfig"), LangiumParser: /* @__PURE__ */ __name((services) => createLangiumParser(services), "LangiumParser"), CompletionParser: /* @__PURE__ */ __name((services) => createCompletionParser(services), "CompletionParser"), ValueConverter: /* @__PURE__ */ __name(() => new DefaultValueConverter(), "ValueConverter"), TokenBuilder: /* @__PURE__ */ __name(() => new DefaultTokenBuilder(), "TokenBuilder"), Lexer: /* @__PURE__ */ __name((services) => new DefaultLexer(services), "Lexer"), ParserErrorMessageProvider: /* @__PURE__ */ __name(() => new LangiumParserErrorMessageProvider(), "ParserErrorMessageProvider") }, workspace: { AstNodeLocator: /* @__PURE__ */ __name(() => new DefaultAstNodeLocator(), "AstNodeLocator"), AstNodeDescriptionProvider: /* @__PURE__ */ __name((services) => new DefaultAstNodeDescriptionProvider(services), "AstNodeDescriptionProvider"), ReferenceDescriptionProvider: /* @__PURE__ */ __name((services) => new DefaultReferenceDescriptionProvider(services), "ReferenceDescriptionProvider") }, references: { Linker: /* @__PURE__ */ __name((services) => new DefaultLinker(services), "Linker"), NameProvider: /* @__PURE__ */ __name(() => new DefaultNameProvider(), "NameProvider"), ScopeProvider: /* @__PURE__ */ __name((services) => new DefaultScopeProvider(services), "ScopeProvider"), ScopeComputation: /* @__PURE__ */ __name((services) => new DefaultScopeComputation(services), "ScopeComputation"), References: /* @__PURE__ */ __name((services) => new DefaultReferences(services), "References") }, serializer: { Hydrator: /* @__PURE__ */ __name((services) => new DefaultHydrator(services), "Hydrator"), JsonSerializer: /* @__PURE__ */ __name((services) => new DefaultJsonSerializer(services), "JsonSerializer") }, validation: { DocumentValidator: /* @__PURE__ */ __name((services) => new DefaultDocumentValidator(services), "DocumentValidator"), ValidationRegistry: /* @__PURE__ */ __name((services) => new ValidationRegistry(services), "ValidationRegistry") }, shared: /* @__PURE__ */ __name(() => context.shared, "shared") }; } function createDefaultSharedCoreModule(context) { return { ServiceRegistry: /* @__PURE__ */ __name(() => new DefaultServiceRegistry(), "ServiceRegistry"), workspace: { LangiumDocuments: /* @__PURE__ */ __name((services) => new DefaultLangiumDocuments(services), "LangiumDocuments"), LangiumDocumentFactory: /* @__PURE__ */ __name((services) => new DefaultLangiumDocumentFactory(services), "LangiumDocumentFactory"), DocumentBuilder: /* @__PURE__ */ __name((services) => new DefaultDocumentBuilder(services), "DocumentBuilder"), IndexManager: /* @__PURE__ */ __name((services) => new DefaultIndexManager(services), "IndexManager"), WorkspaceManager: /* @__PURE__ */ __name((services) => new DefaultWorkspaceManager(services), "WorkspaceManager"), FileSystemProvider: /* @__PURE__ */ __name((services) => context.fileSystemProvider(services), "FileSystemProvider"), WorkspaceLock: /* @__PURE__ */ __name(() => new DefaultWorkspaceLock(), "WorkspaceLock"), ConfigurationProvider: /* @__PURE__ */ __name((services) => new DefaultConfigurationProvider(services), "ConfigurationProvider") } }; } var init_default_module = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/default-module.js"() { "use strict"; init_grammar_config(); init_completion_parser_builder(); init_langium_parser_builder(); init_token_builder(); init_value_converter(); init_linker(); init_name_provider(); init_references(); init_scope_computation(); init_scope_provider(); init_json_serializer(); init_service_registry(); init_document_validator(); init_validation_registry(); init_ast_descriptions(); init_ast_node_locator(); init_configuration(); init_document_builder(); init_documents(); init_index_manager(); init_workspace_manager(); init_lexer2(); init_documentation_provider(); init_comment_provider(); init_langium_parser(); init_async_parser(); init_workspace_lock(); init_hydrator(); __name(createDefaultCoreModule, "createDefaultCoreModule"); __name(createDefaultSharedCoreModule, "createDefaultSharedCoreModule"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/dependency-injection.js 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__ */ __name(() => false, "deleteProperty"), get: /* @__PURE__ */ __name((obj, prop) => _resolve(obj, prop, module2, injector || proxy), "get"), getOwnPropertyDescriptor: /* @__PURE__ */ __name((obj, prop) => (_resolve(obj, prop, module2, injector || proxy), Object.getOwnPropertyDescriptor(obj, prop)), "getOwnPropertyDescriptor"), has: /* @__PURE__ */ __name((_2, prop) => prop in module2, "has"), ownKeys: /* @__PURE__ */ __name(() => [...Reflect.ownKeys(module2), isProxy], "ownKeys") // used by for..in }); proxy[isProxy] = true; return proxy; } function _resolve(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. See https://langium.org/docs/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, value2] of Object.entries(source)) { if (value2 !== void 0) { const value1 = target[key]; if (value1 !== null && value2 !== null && typeof value1 === "object" && typeof value2 === "object") { target[key] = _merge(value1, value2); } else { target[key] = value2; } } } } return target; } var Module, isProxy, __requested__; var init_dependency_injection = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/dependency-injection.js"() { "use strict"; (function(Module2) { Module2.merge = (m1, m2) => _merge(_merge({}, m1), m2); })(Module || (Module = {})); __name(inject, "inject"); isProxy = Symbol("isProxy"); __name(eagerLoad, "eagerLoad"); __name(_inject, "_inject"); __requested__ = Symbol(); __name(_resolve, "_resolve"); __name(_merge, "_merge"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/services.js var init_services = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/services.js"() { "use strict"; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/documentation/index.js var init_documentation = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/documentation/index.js"() { "use strict"; init_comment_provider(); init_documentation_provider(); init_jsdoc(); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/languages/language-meta-data.js var init_language_meta_data = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/languages/language-meta-data.js"() { "use strict"; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/languages/index.js var init_languages = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/languages/index.js"() { "use strict"; init_grammar_config(); init_language_meta_data(); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/parser/parser-config.js var init_parser_config = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/parser/parser-config.js"() { "use strict"; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/parser/index.js var init_parser2 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/parser/index.js"() { "use strict"; init_async_parser(); init_completion_parser_builder(); init_cst_node_builder(); init_langium_parser_builder(); init_langium_parser(); init_lexer2(); init_parser_config(); init_token_builder(); init_value_converter(); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/references/index.js var init_references2 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/references/index.js"() { "use strict"; init_linker(); init_name_provider(); init_references(); init_scope(); init_scope_computation(); init_scope_provider(); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/serializer/index.js var init_serializer = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/serializer/index.js"() { "use strict"; init_hydrator(); init_json_serializer(); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/workspace/file-system-provider.js var EmptyFileSystemProvider, EmptyFileSystem; var init_file_system_provider = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/workspace/file-system-provider.js"() { "use strict"; EmptyFileSystemProvider = class { static { __name(this, "EmptyFileSystemProvider"); } readFile() { throw new Error("No file system is available."); } async readDirectory() { return []; } }; EmptyFileSystem = { fileSystemProvider: /* @__PURE__ */ __name(() => new EmptyFileSystemProvider(), "fileSystemProvider") }; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/utils/grammar-loader.js function createMinimalGrammarServices() { const shared = inject(createDefaultSharedCoreModule(EmptyFileSystem), minimalSharedGrammarModule); const grammar = inject(createDefaultCoreModule({ shared }), minimalGrammarModule); shared.ServiceRegistry.register(grammar); return grammar; } function loadGrammarFromJson(json3) { var _a; const services = createMinimalGrammarServices(); const astNode = services.serializer.JsonSerializer.deserialize(json3); services.shared.workspace.LangiumDocumentFactory.fromModel(astNode, URI2.parse(`memory://${(_a = astNode.name) !== null && _a !== void 0 ? _a : "grammar"}.langium`)); return astNode; } var minimalGrammarModule, minimalSharedGrammarModule; var init_grammar_loader = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/utils/grammar-loader.js"() { "use strict"; init_default_module(); init_dependency_injection(); init_ast(); init_file_system_provider(); init_uri_utils(); minimalGrammarModule = { Grammar: /* @__PURE__ */ __name(() => void 0, "Grammar"), LanguageMetaData: /* @__PURE__ */ __name(() => ({ caseInsensitive: false, fileExtensions: [".langium"], languageId: "langium" }), "LanguageMetaData") }; minimalSharedGrammarModule = { AstReflection: /* @__PURE__ */ __name(() => new LangiumGrammarAstReflection(), "AstReflection") }; __name(createMinimalGrammarServices, "createMinimalGrammarServices"); __name(loadGrammarFromJson, "loadGrammarFromJson"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/utils/index.js var utils_exports = {}; __export(utils_exports, { AstUtils: () => ast_utils_exports, BiMap: () => BiMap, Cancellation: () => cancellation_exports, ContextCache: () => ContextCache, CstUtils: () => cst_utils_exports, DONE_RESULT: () => DONE_RESULT, Deferred: () => Deferred, Disposable: () => Disposable, DisposableCache: () => DisposableCache, DocumentCache: () => DocumentCache, EMPTY_STREAM: () => EMPTY_STREAM, ErrorWithLocation: () => ErrorWithLocation, GrammarUtils: () => grammar_utils_exports, MultiMap: () => MultiMap, OperationCancelled: () => OperationCancelled, Reduction: () => Reduction, RegExpUtils: () => regexp_utils_exports, SimpleCache: () => SimpleCache, StreamImpl: () => StreamImpl, TreeStreamImpl: () => TreeStreamImpl, URI: () => URI2, UriUtils: () => UriUtils, WorkspaceCache: () => WorkspaceCache, assertUnreachable: () => assertUnreachable, delayNextTick: () => delayNextTick, interruptAndCheck: () => interruptAndCheck, isOperationCancelled: () => isOperationCancelled, loadGrammarFromJson: () => loadGrammarFromJson, setInterruptionPeriod: () => setInterruptionPeriod, startCancelableOperation: () => startCancelableOperation, stream: () => stream }); var init_utils4 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/utils/index.js"() { "use strict"; init_caching(); init_event3(); __reExport(utils_exports, event_exports); init_collections(); init_disposable(); init_errors2(); init_grammar_loader(); init_promise_utils(); init_stream(); init_uri_utils(); init_ast_utils(); init_cancellation(); init_cst_utils(); init_grammar_utils(); init_regexp_utils(); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/validation/index.js var init_validation = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/validation/index.js"() { "use strict"; init_document_validator(); init_validation_registry(); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/workspace/index.js var init_workspace = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/workspace/index.js"() { "use strict"; init_ast_descriptions(); init_ast_node_locator(); init_configuration(); init_document_builder(); init_documents(); init_file_system_provider(); init_index_manager(); init_workspace_lock(); init_workspace_manager(); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/index.js var lib_exports = {}; __export(lib_exports, { AbstractAstReflection: () => AbstractAstReflection, AbstractCstNode: () => AbstractCstNode, AbstractLangiumParser: () => AbstractLangiumParser, AbstractParserErrorMessageProvider: () => AbstractParserErrorMessageProvider, AbstractThreadedAsyncParser: () => AbstractThreadedAsyncParser, AstUtils: () => ast_utils_exports, BiMap: () => BiMap, Cancellation: () => cancellation_exports, CompositeCstNodeImpl: () => CompositeCstNodeImpl, ContextCache: () => ContextCache, CstNodeBuilder: () => CstNodeBuilder, CstUtils: () => cst_utils_exports, DONE_RESULT: () => DONE_RESULT, DatatypeSymbol: () => DatatypeSymbol, DefaultAstNodeDescriptionProvider: () => DefaultAstNodeDescriptionProvider, DefaultAstNodeLocator: () => DefaultAstNodeLocator, DefaultAsyncParser: () => DefaultAsyncParser, DefaultCommentProvider: () => DefaultCommentProvider, DefaultConfigurationProvider: () => DefaultConfigurationProvider, DefaultDocumentBuilder: () => DefaultDocumentBuilder, DefaultDocumentValidator: () => DefaultDocumentValidator, DefaultHydrator: () => DefaultHydrator, DefaultIndexManager: () => DefaultIndexManager, DefaultJsonSerializer: () => DefaultJsonSerializer, DefaultLangiumDocumentFactory: () => DefaultLangiumDocumentFactory, DefaultLangiumDocuments: () => DefaultLangiumDocuments, DefaultLexer: () => DefaultLexer, DefaultLinker: () => DefaultLinker, DefaultNameProvider: () => DefaultNameProvider, DefaultReferenceDescriptionProvider: () => DefaultReferenceDescriptionProvider, DefaultReferences: () => DefaultReferences, DefaultScopeComputation: () => DefaultScopeComputation, DefaultScopeProvider: () => DefaultScopeProvider, DefaultServiceRegistry: () => DefaultServiceRegistry, DefaultTokenBuilder: () => DefaultTokenBuilder, DefaultValueConverter: () => DefaultValueConverter, DefaultWorkspaceLock: () => DefaultWorkspaceLock, DefaultWorkspaceManager: () => DefaultWorkspaceManager, Deferred: () => Deferred, Disposable: () => Disposable, DisposableCache: () => DisposableCache, DocumentCache: () => DocumentCache, DocumentState: () => DocumentState, DocumentValidator: () => DocumentValidator, EMPTY_SCOPE: () => EMPTY_SCOPE, EMPTY_STREAM: () => EMPTY_STREAM, EmptyFileSystem: () => EmptyFileSystem, EmptyFileSystemProvider: () => EmptyFileSystemProvider, ErrorWithLocation: () => ErrorWithLocation, GrammarAST: () => ast_exports, GrammarUtils: () => grammar_utils_exports, JSDocDocumentationProvider: () => JSDocDocumentationProvider, LangiumCompletionParser: () => LangiumCompletionParser, LangiumParser: () => LangiumParser, LangiumParserErrorMessageProvider: () => LangiumParserErrorMessageProvider, LeafCstNodeImpl: () => LeafCstNodeImpl, MapScope: () => MapScope, Module: () => Module, MultiMap: () => MultiMap, OperationCancelled: () => OperationCancelled, ParserWorker: () => ParserWorker, Reduction: () => Reduction, RegExpUtils: () => regexp_utils_exports, RootCstNodeImpl: () => RootCstNodeImpl, SimpleCache: () => SimpleCache, StreamImpl: () => StreamImpl, StreamScope: () => StreamScope, TextDocument: () => TextDocument2, TreeStreamImpl: () => TreeStreamImpl, URI: () => URI2, UriUtils: () => UriUtils, ValidationCategory: () => ValidationCategory, ValidationRegistry: () => ValidationRegistry, ValueConverter: () => ValueConverter, WorkspaceCache: () => WorkspaceCache, assertUnreachable: () => assertUnreachable, createCompletionParser: () => createCompletionParser, createDefaultCoreModule: () => createDefaultCoreModule, createDefaultSharedCoreModule: () => createDefaultSharedCoreModule, createGrammarConfig: () => createGrammarConfig, createLangiumParser: () => createLangiumParser, delayNextTick: () => delayNextTick, diagnosticData: () => diagnosticData, eagerLoad: () => eagerLoad, getDiagnosticRange: () => getDiagnosticRange, inject: () => inject, interruptAndCheck: () => interruptAndCheck, isAstNode: () => isAstNode, isAstNodeDescription: () => isAstNodeDescription, isAstNodeWithComment: () => isAstNodeWithComment, isCompositeCstNode: () => isCompositeCstNode, isIMultiModeLexerDefinition: () => isIMultiModeLexerDefinition, isJSDoc: () => isJSDoc, isLeafCstNode: () => isLeafCstNode, isLinkingError: () => isLinkingError, isNamed: () => isNamed, isOperationCancelled: () => isOperationCancelled, isReference: () => isReference, isRootCstNode: () => isRootCstNode, isTokenTypeArray: () => isTokenTypeArray, isTokenTypeDictionary: () => isTokenTypeDictionary, loadGrammarFromJson: () => loadGrammarFromJson, parseJSDoc: () => parseJSDoc, prepareLangiumParser: () => prepareLangiumParser, setInterruptionPeriod: () => setInterruptionPeriod, startCancelableOperation: () => startCancelableOperation, stream: () => stream, toDiagnosticSeverity: () => toDiagnosticSeverity }); var init_lib3 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/langium/lib/index.js"() { "use strict"; init_default_module(); init_dependency_injection(); init_service_registry(); init_services(); init_syntax_tree(); init_documentation(); init_languages(); init_parser2(); init_references2(); init_serializer(); init_utils4(); __reExport(lib_exports, utils_exports); init_validation(); init_workspace(); init_ast(); } }); // ../parser/dist/chunks/mermaid-parser.core/chunk-Y27MQZ3U.mjs function isArchitecture(item) { return reflection2.isInstance(item, Architecture); } function isBranch(item) { return reflection2.isInstance(item, Branch); } function isCommit(item) { return reflection2.isInstance(item, Commit); } function isCommon(item) { return reflection2.isInstance(item, Common); } function isGitGraph(item) { return reflection2.isInstance(item, GitGraph); } function isInfo(item) { return reflection2.isInstance(item, Info); } function isMerge(item) { return reflection2.isInstance(item, Merge); } function isPacket(item) { return reflection2.isInstance(item, Packet); } function isPacketBlock(item) { return reflection2.isInstance(item, PacketBlock); } function isPie(item) { return reflection2.isInstance(item, Pie); } function isPieSection(item) { return reflection2.isInstance(item, PieSection); } var __defProp2, __name2, Statement, Architecture, Branch, Checkout, CherryPicking, Commit, Common, GitGraph, Info, Merge, Packet, PacketBlock, Pie, PieSection, Direction, MermaidAstReflection, reflection2, loadedInfoGrammar, InfoGrammar, loadedPacketGrammar, PacketGrammar, loadedPieGrammar, PieGrammar, loadedArchitectureGrammar, ArchitectureGrammar, loadedGitGraphGrammar, GitGraphGrammar, InfoLanguageMetaData, PacketLanguageMetaData, PieLanguageMetaData, ArchitectureLanguageMetaData, GitGraphLanguageMetaData, MermaidGeneratedSharedModule, InfoGeneratedModule, PacketGeneratedModule, PieGeneratedModule, ArchitectureGeneratedModule, GitGraphGeneratedModule, accessibilityDescrRegex, accessibilityTitleRegex, titleRegex, rulesRegexes, AbstractMermaidValueConverter, CommonValueConverter, AbstractMermaidTokenBuilder, CommonTokenBuilder; var init_chunk_Y27MQZ3U = __esm({ "../parser/dist/chunks/mermaid-parser.core/chunk-Y27MQZ3U.mjs"() { "use strict"; init_lib3(); init_lib3(); init_lib3(); init_lib3(); __defProp2 = Object.defineProperty; __name2 = /* @__PURE__ */ __name((target, value2) => __defProp2(target, "name", { value: value2, configurable: true }), "__name"); Statement = "Statement"; Architecture = "Architecture"; __name(isArchitecture, "isArchitecture"); __name2(isArchitecture, "isArchitecture"); Branch = "Branch"; __name(isBranch, "isBranch"); __name2(isBranch, "isBranch"); Checkout = "Checkout"; CherryPicking = "CherryPicking"; Commit = "Commit"; __name(isCommit, "isCommit"); __name2(isCommit, "isCommit"); Common = "Common"; __name(isCommon, "isCommon"); __name2(isCommon, "isCommon"); GitGraph = "GitGraph"; __name(isGitGraph, "isGitGraph"); __name2(isGitGraph, "isGitGraph"); Info = "Info"; __name(isInfo, "isInfo"); __name2(isInfo, "isInfo"); Merge = "Merge"; __name(isMerge, "isMerge"); __name2(isMerge, "isMerge"); Packet = "Packet"; __name(isPacket, "isPacket"); __name2(isPacket, "isPacket"); PacketBlock = "PacketBlock"; __name(isPacketBlock, "isPacketBlock"); __name2(isPacketBlock, "isPacketBlock"); Pie = "Pie"; __name(isPie, "isPie"); __name2(isPie, "isPie"); PieSection = "PieSection"; __name(isPieSection, "isPieSection"); __name2(isPieSection, "isPieSection"); Direction = "Direction"; MermaidAstReflection = class extends AbstractAstReflection { static { __name(this, "MermaidAstReflection"); } static { __name2(this, "MermaidAstReflection"); } getAllTypes() { return ["Architecture", "Branch", "Checkout", "CherryPicking", "Commit", "Common", "Direction", "Edge", "GitGraph", "Group", "Info", "Junction", "Merge", "Packet", "PacketBlock", "Pie", "PieSection", "Service", "Statement"]; } computeIsSubtype(subtype, supertype) { switch (subtype) { case Branch: case Checkout: case CherryPicking: case Commit: case Merge: { return this.isSubtype(Statement, supertype); } case Direction: { return this.isSubtype(GitGraph, supertype); } default: { return false; } } } getReferenceType(refInfo) { const referenceId = `${refInfo.container.$type}:${refInfo.property}`; switch (referenceId) { default: { throw new Error(`${referenceId} is not a valid reference id.`); } } } getTypeMetaData(type3) { switch (type3) { case "Architecture": { return { name: "Architecture", properties: [ { name: "accDescr" }, { name: "accTitle" }, { name: "edges", defaultValue: [] }, { name: "groups", defaultValue: [] }, { name: "junctions", defaultValue: [] }, { name: "services", defaultValue: [] }, { name: "title" } ] }; } case "Branch": { return { name: "Branch", properties: [ { name: "name" }, { name: "order" } ] }; } case "Checkout": { return { name: "Checkout", properties: [ { name: "branch" } ] }; } case "CherryPicking": { return { name: "CherryPicking", properties: [ { name: "id" }, { name: "parent" }, { name: "tags", defaultValue: [] } ] }; } case "Commit": { return { name: "Commit", properties: [ { name: "id" }, { name: "message" }, { name: "tags", defaultValue: [] }, { name: "type" } ] }; } case "Common": { return { name: "Common", properties: [ { name: "accDescr" }, { name: "accTitle" }, { name: "title" } ] }; } case "Edge": { return { name: "Edge", properties: [ { name: "lhsDir" }, { name: "lhsGroup", defaultValue: false }, { name: "lhsId" }, { name: "lhsInto", defaultValue: false }, { name: "rhsDir" }, { name: "rhsGroup", defaultValue: false }, { name: "rhsId" }, { name: "rhsInto", defaultValue: false }, { name: "title" } ] }; } case "GitGraph": { return { name: "GitGraph", properties: [ { name: "accDescr" }, { name: "accTitle" }, { name: "statements", defaultValue: [] }, { name: "title" } ] }; } case "Group": { return { name: "Group", properties: [ { name: "icon" }, { name: "id" }, { name: "in" }, { name: "title" } ] }; } case "Info": { return { name: "Info", properties: [ { name: "accDescr" }, { name: "accTitle" }, { name: "title" } ] }; } case "Junction": { return { name: "Junction", properties: [ { name: "id" }, { name: "in" } ] }; } case "Merge": { return { name: "Merge", properties: [ { name: "branch" }, { name: "id" }, { name: "tags", defaultValue: [] }, { name: "type" } ] }; } case "Packet": { return { name: "Packet", properties: [ { name: "accDescr" }, { name: "accTitle" }, { name: "blocks", defaultValue: [] }, { name: "title" } ] }; } case "PacketBlock": { return { name: "PacketBlock", properties: [ { name: "end" }, { name: "label" }, { name: "start" } ] }; } case "Pie": { return { name: "Pie", properties: [ { name: "accDescr" }, { name: "accTitle" }, { name: "sections", defaultValue: [] }, { name: "showData", defaultValue: false }, { name: "title" } ] }; } case "PieSection": { return { name: "PieSection", properties: [ { name: "label" }, { name: "value" } ] }; } case "Service": { return { name: "Service", properties: [ { name: "icon" }, { name: "iconText" }, { name: "id" }, { name: "in" }, { name: "title" } ] }; } case "Direction": { return { name: "Direction", properties: [ { name: "accDescr" }, { name: "accTitle" }, { name: "dir" }, { name: "statements", defaultValue: [] }, { name: "title" } ] }; } default: { return { name: type3, properties: [] }; } } } }; reflection2 = new MermaidAstReflection(); InfoGrammar = /* @__PURE__ */ __name2(() => loadedInfoGrammar ?? (loadedInfoGrammar = loadGrammarFromJson('{"$type":"Grammar","isDeclared":true,"name":"Info","imports":[],"rules":[{"$type":"ParserRule","name":"Info","entry":true,"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"info"},{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[],"cardinality":"*"},{"$type":"Group","elements":[{"$type":"Keyword","value":"showInfo"},{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[],"cardinality":"*"}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[],"cardinality":"?"}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"TitleAndAccessibilities","fragment":true,"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@2"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"EOL","fragment":true,"dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"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":[]}],"types":[],"usedGrammars":[]}')), "InfoGrammar"); PacketGrammar = /* @__PURE__ */ __name2(() => loadedPacketGrammar ?? (loadedPacketGrammar = loadGrammarFromJson(`{"$type":"Grammar","isDeclared":true,"name":"Packet","imports":[],"rules":[{"$type":"ParserRule","name":"Packet","entry":true,"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"packet-beta"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Assignment","feature":"blocks","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]},"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"+"},{"$type":"Assignment","feature":"blocks","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]},"cardinality":"+"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"}]}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"PacketBlock","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"start","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"-"},{"$type":"Assignment","feature":"end","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}}],"cardinality":"?"},{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]*\\"|'[^']*'/"},"fragment":false,"hidden":false},{"$type":"ParserRule","name":"TitleAndAccessibilities","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"EOL","fragment":true,"dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"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":[]}],"types":[],"usedGrammars":[]}`)), "PacketGrammar"); PieGrammar = /* @__PURE__ */ __name2(() => loadedPieGrammar ?? (loadedPieGrammar = loadGrammarFromJson('{"$type":"Grammar","isDeclared":true,"name":"Pie","imports":[],"rules":[{"$type":"ParserRule","name":"Pie","entry":true,"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"pie"},{"$type":"Assignment","feature":"showData","operator":"?=","terminal":{"$type":"Keyword","value":"showData"},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Assignment","feature":"sections","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]},"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"+"},{"$type":"Assignment","feature":"sections","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]},"cardinality":"+"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"*"}]}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"PieSection","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"PIE_SECTION_LABEL","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]+\\"/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"PIE_SECTION_VALUE","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/(0|[1-9][0-9]*)(\\\\.[0-9]+)?/"},"fragment":false,"hidden":false},{"$type":"ParserRule","name":"TitleAndAccessibilities","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"EOL","fragment":true,"dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"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":[]}],"types":[],"usedGrammars":[]}')), "PieGrammar"); ArchitectureGrammar = /* @__PURE__ */ __name2(() => loadedArchitectureGrammar ?? (loadedArchitectureGrammar = loadGrammarFromJson('{"$type":"Grammar","isDeclared":true,"name":"Architecture","imports":[],"rules":[{"$type":"ParserRule","name":"Architecture","entry":true,"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"architecture-beta"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}]},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[],"cardinality":"*"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"*"}]}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Statement","fragment":true,"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":[]}}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"LeftPort","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"lhsDir","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"RightPort","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"rhsDir","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}},{"$type":"Keyword","value":":"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Arrow","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]},{"$type":"Assignment","feature":"lhsInto","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"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@13"},"arguments":[]}},{"$type":"Keyword","value":"-"}]}]},{"$type":"Assignment","feature":"rhsInto","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Group","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"group"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Assignment","feature":"icon","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]},"cardinality":"?"},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Service","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"service"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"iconText","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"Assignment","feature":"icon","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}}],"cardinality":"?"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]},"cardinality":"?"},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Junction","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"junction"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Edge","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"lhsId","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Assignment","feature":"lhsGroup","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Assignment","feature":"rhsId","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"Assignment","feature":"rhsGroup","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"ARROW_DIRECTION","definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"L"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"R"}}]},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"T"}}]},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"B"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_ID","definition":{"$type":"RegexToken","regex":"/[\\\\w]+/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_TEXT_ICON","definition":{"$type":"RegexToken","regex":"/\\\\(\\"[^\\"]+\\"\\\\)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_ICON","definition":{"$type":"RegexToken","regex":"/\\\\([\\\\w-:]+\\\\)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_TITLE","definition":{"$type":"RegexToken","regex":"/\\\\[[\\\\w ]+\\\\]/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARROW_GROUP","definition":{"$type":"RegexToken","regex":"/\\\\{group\\\\}/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARROW_INTO","definition":{"$type":"RegexToken","regex":"/<|>/"},"fragment":false,"hidden":false},{"$type":"ParserRule","name":"TitleAndAccessibilities","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"EOL","fragment":true,"dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"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":[]}],"types":[],"usedGrammars":[]}')), "ArchitectureGrammar"); GitGraphGrammar = /* @__PURE__ */ __name2(() => loadedGitGraphGrammar ?? (loadedGitGraphGrammar = loadGrammarFromJson(`{"$type":"Grammar","isDeclared":true,"name":"GitGraph","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","name":"TitleAndAccessibilities","fragment":true,"definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"EOL","fragment":true,"dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false},{"$type":"ParserRule","name":"GitGraph","entry":true,"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"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@12"},"arguments":[]},{"$type":"Keyword","value":":"}]}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@0"},"arguments":[]},{"$type":"Assignment","feature":"statements","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}],"cardinality":"*"}]}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Statement","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":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$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"}]}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$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@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"msg:","cardinality":"?"},{"$type":"Assignment","feature":"message","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"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@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$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@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"order:"},{"$type":"Assignment","feature":"order","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$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@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}]}},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"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@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$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@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$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@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"parent:"},{"$type":"Assignment","feature":"parent","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+(?=\\\\s)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\\\w([-\\\\./\\\\w]*[-\\\\w])?/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]*\\"|'[^']*'/"},"fragment":false,"hidden":false}],"definesHiddenTokens":false,"hiddenTokens":[],"imports":[],"types":[],"usedGrammars":[]}`)), "GitGraphGrammar"); InfoLanguageMetaData = { languageId: "info", fileExtensions: [".mmd", ".mermaid"], caseInsensitive: false }; PacketLanguageMetaData = { languageId: "packet", fileExtensions: [".mmd", ".mermaid"], caseInsensitive: false }; PieLanguageMetaData = { languageId: "pie", fileExtensions: [".mmd", ".mermaid"], caseInsensitive: false }; ArchitectureLanguageMetaData = { languageId: "architecture", fileExtensions: [".mmd", ".mermaid"], caseInsensitive: false }; GitGraphLanguageMetaData = { languageId: "gitGraph", fileExtensions: [".mmd", ".mermaid"], caseInsensitive: false }; MermaidGeneratedSharedModule = { AstReflection: /* @__PURE__ */ __name2(() => new MermaidAstReflection(), "AstReflection") }; InfoGeneratedModule = { Grammar: /* @__PURE__ */ __name2(() => InfoGrammar(), "Grammar"), LanguageMetaData: /* @__PURE__ */ __name2(() => InfoLanguageMetaData, "LanguageMetaData"), parser: {} }; PacketGeneratedModule = { Grammar: /* @__PURE__ */ __name2(() => PacketGrammar(), "Grammar"), LanguageMetaData: /* @__PURE__ */ __name2(() => PacketLanguageMetaData, "LanguageMetaData"), parser: {} }; PieGeneratedModule = { Grammar: /* @__PURE__ */ __name2(() => PieGrammar(), "Grammar"), LanguageMetaData: /* @__PURE__ */ __name2(() => PieLanguageMetaData, "LanguageMetaData"), parser: {} }; ArchitectureGeneratedModule = { Grammar: /* @__PURE__ */ __name2(() => ArchitectureGrammar(), "Grammar"), LanguageMetaData: /* @__PURE__ */ __name2(() => ArchitectureLanguageMetaData, "LanguageMetaData"), parser: {} }; GitGraphGeneratedModule = { Grammar: /* @__PURE__ */ __name2(() => GitGraphGrammar(), "Grammar"), LanguageMetaData: /* @__PURE__ */ __name2(() => GitGraphLanguageMetaData, "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 match2 = regex2.exec(input); if (match2 === null) { return void 0; } if (match2[1] !== void 0) { return match2[1].trim().replace(/[\t ]{2,}/gm, " "); } if (match2[2] !== void 0) { return match2[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(rules, terminalTokens, options3) { const tokenTypes = super.buildKeywordTokens(rules, terminalTokens, options3); 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-NCMFTTUW.mjs function createGitGraphServices(context = EmptyFileSystem) { const shared = inject( createDefaultSharedCoreModule(context), MermaidGeneratedSharedModule ); const GitGraph2 = inject( createDefaultCoreModule({ shared }), GitGraphGeneratedModule, GitGraphModule ); shared.ServiceRegistry.register(GitGraph2); return { shared, GitGraph: GitGraph2 }; } var GitGraphTokenBuilder, GitGraphModule; var init_chunk_NCMFTTUW = __esm({ "../parser/dist/chunks/mermaid-parser.core/chunk-NCMFTTUW.mjs"() { "use strict"; init_chunk_Y27MQZ3U(); init_lib3(); 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-4YFB5VUC.mjs function createInfoServices(context = EmptyFileSystem) { const shared = inject( createDefaultSharedCoreModule(context), MermaidGeneratedSharedModule ); const Info2 = inject( createDefaultCoreModule({ shared }), InfoGeneratedModule, InfoModule ); shared.ServiceRegistry.register(Info2); return { shared, Info: Info2 }; } var InfoTokenBuilder, InfoModule; var init_chunk_4YFB5VUC = __esm({ "../parser/dist/chunks/mermaid-parser.core/chunk-4YFB5VUC.mjs"() { "use strict"; init_chunk_Y27MQZ3U(); init_lib3(); 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-EQFLFMNE.mjs function createPacketServices(context = EmptyFileSystem) { const shared = inject( createDefaultSharedCoreModule(context), MermaidGeneratedSharedModule ); const Packet2 = inject( createDefaultCoreModule({ shared }), PacketGeneratedModule, PacketModule ); shared.ServiceRegistry.register(Packet2); return { shared, Packet: Packet2 }; } var PacketTokenBuilder, PacketModule; var init_chunk_EQFLFMNE = __esm({ "../parser/dist/chunks/mermaid-parser.core/chunk-EQFLFMNE.mjs"() { "use strict"; init_chunk_Y27MQZ3U(); init_lib3(); PacketTokenBuilder = class extends AbstractMermaidTokenBuilder { static { __name(this, "PacketTokenBuilder"); } static { __name2(this, "PacketTokenBuilder"); } constructor() { super(["packet-beta"]); } }; 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-BI6EQKOQ.mjs function createPieServices(context = EmptyFileSystem) { const shared = inject( createDefaultSharedCoreModule(context), MermaidGeneratedSharedModule ); const Pie2 = inject( createDefaultCoreModule({ shared }), PieGeneratedModule, PieModule ); shared.ServiceRegistry.register(Pie2); return { shared, Pie: Pie2 }; } var PieTokenBuilder, PieValueConverter, PieModule; var init_chunk_BI6EQKOQ = __esm({ "../parser/dist/chunks/mermaid-parser.core/chunk-BI6EQKOQ.mjs"() { "use strict"; init_chunk_Y27MQZ3U(); init_lib3(); 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-FF7BQXOH.mjs function createArchitectureServices(context = EmptyFileSystem) { const shared = inject( createDefaultSharedCoreModule(context), MermaidGeneratedSharedModule ); const Architecture2 = inject( createDefaultCoreModule({ shared }), ArchitectureGeneratedModule, ArchitectureModule ); shared.ServiceRegistry.register(Architecture2); return { shared, Architecture: Architecture2 }; } var ArchitectureTokenBuilder, ArchitectureValueConverter, ArchitectureModule; var init_chunk_FF7BQXOH = __esm({ "../parser/dist/chunks/mermaid-parser.core/chunk-FF7BQXOH.mjs"() { "use strict"; init_chunk_Y27MQZ3U(); init_lib3(); 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") { return input.replace(/[[\]]/g, "").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/info-46DW6VJ7.mjs var info_46DW6VJ7_exports = {}; __export(info_46DW6VJ7_exports, { InfoModule: () => InfoModule, createInfoServices: () => createInfoServices }); var init_info_46DW6VJ7 = __esm({ "../parser/dist/chunks/mermaid-parser.core/info-46DW6VJ7.mjs"() { "use strict"; init_chunk_4YFB5VUC(); init_chunk_Y27MQZ3U(); } }); // ../parser/dist/chunks/mermaid-parser.core/packet-W2GHVCYJ.mjs var packet_W2GHVCYJ_exports = {}; __export(packet_W2GHVCYJ_exports, { PacketModule: () => PacketModule, createPacketServices: () => createPacketServices }); var init_packet_W2GHVCYJ = __esm({ "../parser/dist/chunks/mermaid-parser.core/packet-W2GHVCYJ.mjs"() { "use strict"; init_chunk_EQFLFMNE(); init_chunk_Y27MQZ3U(); } }); // ../parser/dist/chunks/mermaid-parser.core/pie-BEWT4RHE.mjs var pie_BEWT4RHE_exports = {}; __export(pie_BEWT4RHE_exports, { PieModule: () => PieModule, createPieServices: () => createPieServices }); var init_pie_BEWT4RHE = __esm({ "../parser/dist/chunks/mermaid-parser.core/pie-BEWT4RHE.mjs"() { "use strict"; init_chunk_BI6EQKOQ(); init_chunk_Y27MQZ3U(); } }); // ../parser/dist/chunks/mermaid-parser.core/architecture-I3QFYML2.mjs var architecture_I3QFYML2_exports = {}; __export(architecture_I3QFYML2_exports, { ArchitectureModule: () => ArchitectureModule, createArchitectureServices: () => createArchitectureServices }); var init_architecture_I3QFYML2 = __esm({ "../parser/dist/chunks/mermaid-parser.core/architecture-I3QFYML2.mjs"() { "use strict"; init_chunk_FF7BQXOH(); init_chunk_Y27MQZ3U(); } }); // ../parser/dist/chunks/mermaid-parser.core/gitGraph-YCYPL57B.mjs var gitGraph_YCYPL57B_exports = {}; __export(gitGraph_YCYPL57B_exports, { GitGraphModule: () => GitGraphModule, createGitGraphServices: () => createGitGraphServices }); var init_gitGraph_YCYPL57B = __esm({ "../parser/dist/chunks/mermaid-parser.core/gitGraph-YCYPL57B.mjs"() { "use strict"; init_chunk_NCMFTTUW(); init_chunk_Y27MQZ3U(); } }); // ../parser/dist/mermaid-parser.core.mjs async function parse2(diagramType, text3) { const initializer = initializers[diagramType]; if (!initializer) { throw new Error(`Unknown diagram type: ${diagramType}`); } if (!parsers[diagramType]) { await initializer(); } const parser23 = parsers[diagramType]; const result = parser23.parse(text3); 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_NCMFTTUW(); init_chunk_4YFB5VUC(); init_chunk_EQFLFMNE(); init_chunk_BI6EQKOQ(); init_chunk_FF7BQXOH(); init_chunk_Y27MQZ3U(); parsers = {}; initializers = { info: /* @__PURE__ */ __name2(async () => { const { createInfoServices: createInfoServices2 } = await Promise.resolve().then(() => (init_info_46DW6VJ7(), info_46DW6VJ7_exports)); const parser23 = createInfoServices2().Info.parser.LangiumParser; parsers.info = parser23; }, "info"), packet: /* @__PURE__ */ __name2(async () => { const { createPacketServices: createPacketServices2 } = await Promise.resolve().then(() => (init_packet_W2GHVCYJ(), packet_W2GHVCYJ_exports)); const parser23 = createPacketServices2().Packet.parser.LangiumParser; parsers.packet = parser23; }, "packet"), pie: /* @__PURE__ */ __name2(async () => { const { createPieServices: createPieServices2 } = await Promise.resolve().then(() => (init_pie_BEWT4RHE(), pie_BEWT4RHE_exports)); const parser23 = createPieServices2().Pie.parser.LangiumParser; parsers.pie = parser23; }, "pie"), architecture: /* @__PURE__ */ __name2(async () => { const { createArchitectureServices: createArchitectureServices2 } = await Promise.resolve().then(() => (init_architecture_I3QFYML2(), architecture_I3QFYML2_exports)); const parser23 = createArchitectureServices2().Architecture.parser.LangiumParser; parsers.architecture = parser23; }, "architecture"), gitGraph: /* @__PURE__ */ __name2(async () => { const { createGitGraphServices: createGitGraphServices2 } = await Promise.resolve().then(() => (init_gitGraph_YCYPL57B(), gitGraph_YCYPL57B_exports)); const parser23 = createGitGraphServices2().GitGraph.parser.LangiumParser; parsers.gitGraph = parser23; }, "gitGraph") }; __name(parse2, "parse"); __name2(parse2, "parse"); MermaidParseError = class extends Error { static { __name(this, "MermaidParseError"); } constructor(result) { const lexerErrors = result.lexerErrors.map((err) => err.message).join("\n"); const parserErrors = result.parserErrors.map((err) => err.message).join("\n"); super(`Parsing failed: ${lexerErrors} ${parserErrors}`); this.result = result; } static { __name2(this, "MermaidParseError"); } }; } }); // src/diagrams/common/populateCommonDb.ts function populateCommonDb(ast, db9) { if (ast.accDescr) { db9.setAccDescription?.(ast.accDescr); } if (ast.accTitle) { db9.setAccTitle?.(ast.accTitle); } if (ast.title) { db9.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(list2, fn3) { const recordMap = /* @__PURE__ */ Object.create(null); return list2.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, setDirection2, setOptions2, getOptions, commit, branch, merge3, cherryPick, checkout, prettyPrint, clear9, getBranchesAsObjArray, getBranches, getCommits, getCommitsArray, getCurrentBranch, getDirection2, 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 config6 = cleanAndMerge({ ...DEFAULT_GITGRAPH_CONFIG, ...getConfig().gitGraph }); return config6; }, "getConfig"); state2 = new ImperativeState(() => { const config6 = getConfig3(); const mainBranchName = config6.mainBranchName; const mainBranchOrder = config6.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"); setDirection2 = /* @__PURE__ */ __name(function(dir2) { state2.records.direction = dir2; }, "setDirection"); setOptions2 = /* @__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 id28 = commitDB.id; const type3 = commitDB.type; let tags2 = commitDB.tags; log.info("commit", msg, id28, type3, tags2); log.debug("Entering commit:", msg, id28, type3, tags2); const config6 = getConfig3(); id28 = common_default.sanitizeText(id28, config6); msg = common_default.sanitizeText(msg, config6); tags2 = tags2?.map((tag2) => common_default.sanitizeText(tag2, config6)); const newCommit = { id: id28 ? id28 : 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", config6.mainBranchName); 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"); merge3 = /* @__PURE__ */ __name((mergeDB) => { let otherBranch = mergeDB.branch; let customId = mergeDB.id; const overrideType = mergeDB.type; const customTags = mergeDB.tags; const config6 = getConfig3(); otherBranch = common_default.sanitizeText(otherBranch, config6); if (customId) { customId = common_default.sanitizeText(customId, config6); } 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 config6 = getConfig3(); sourceId = common_default.sanitizeText(sourceId, config6); targetId = common_default.sanitizeText(targetId, config6); tags2 = tags2?.map((tag2) => common_default.sanitizeText(tag2, config6)); parentCommitId = common_default.sanitizeText(parentCommitId, config6); 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 id28 = state2.records.branches.get(state2.records.currBranch); if (id28 === void 0 || !id28) { state2.records.head = null; } else { state2.records.head = state2.records.commits.get(id28) ?? null; } } }, "checkout"); __name(upsert, "upsert"); __name(prettyPrintCommitHistory, "prettyPrintCommitHistory"); prettyPrint = /* @__PURE__ */ __name(function() { log.debug(state2.records.commits); const node2 = getCommitsArray()[0]; prettyPrintCommitHistory([node2]); }, "prettyPrint"); clear9 = /* @__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, b2) => (a2.order ?? 0) - (b2.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, b2) => a2.seq - b2.seq); return commitArr; }, "getCommitsArray"); getCurrentBranch = /* @__PURE__ */ __name(function() { return state2.records.currBranch; }, "getCurrentBranch"); getDirection2 = /* @__PURE__ */ __name(function() { return state2.records.direction; }, "getDirection"); getHead = /* @__PURE__ */ __name(function() { return state2.records.head; }, "getHead"); db = { commitType, getConfig: getConfig3, setDirection: setDirection2, setOptions: setOptions2, getOptions, commit, branch, merge: merge3, cherryPick, checkout, //reset, prettyPrint, clear: clear9, getBranchesAsObjArray, getBranches, getCommits, getCommitsArray, getCurrentBranch, getDirection: getDirection2, getHead, setAccTitle, getAccTitle, getAccDescription, setAccDescription, setDiagramTitle, getDiagramTitle }; } }); // src/diagrams/git/gitGraphParser.ts var populate, parseStatement, parseCommit, parseBranch, parseMerge, parseCheckout, parseCherryPicking, parser5; var init_gitGraphParser = __esm({ "src/diagrams/git/gitGraphParser.ts"() { "use strict"; init_mermaid_parser_core(); init_logger(); init_populateCommonDb(); init_gitGraphAst(); init_gitGraphTypes(); populate = /* @__PURE__ */ __name((ast, db9) => { populateCommonDb(ast, db9); if (ast.dir) { db9.setDirection(ast.dir); } for (const statement of ast.statements) { parseStatement(statement, db9); } }, "populate"); parseStatement = /* @__PURE__ */ __name((statement, db9) => { const parsers2 = { Commit: /* @__PURE__ */ __name((stmt) => db9.commit(parseCommit(stmt)), "Commit"), Branch: /* @__PURE__ */ __name((stmt) => db9.branch(parseBranch(stmt)), "Branch"), Merge: /* @__PURE__ */ __name((stmt) => db9.merge(parseMerge(stmt)), "Merge"), Checkout: /* @__PURE__ */ __name((stmt) => db9.checkout(parseCheckout(stmt)), "Checkout"), CherryPicking: /* @__PURE__ */ __name((stmt) => db9.cherryPick(parseCherryPicking(stmt)), "CherryPicking") }; const parser23 = parsers2[statement.$type]; if (parser23) { parser23(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((merge5) => { const mergeDB = { branch: merge5.branch, id: merge5.id ?? "", type: merge5.type !== void 0 ? commitType[merge5.type] : void 0, tags: merge5.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"); parser5 = { parse: /* @__PURE__ */ __name(async (input) => { const ast = await parse2("gitGraph", input); log.debug(ast); populate(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 merge5 = { $type: "Merge", branch: "newBranch", id: "1", tags: ["tag1", "tag2"], type: "NORMAL" }; parseStatement(merge5, 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: [] }; 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" } ] }; populate(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 DEFAULT_CONFIG, DEFAULT_GITGRAPH_CONFIG2, LAYOUT_OFFSET, COMMIT_STEP, PX, PY, THEME_COLOR_LIMIT, branchPos, commitPos, defaultPos, allCommitsDict, lanes, maxPos, dir, clear10, 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(); DEFAULT_CONFIG = getConfig2(); DEFAULT_GITGRAPH_CONFIG2 = DEFAULT_CONFIG?.gitGraph; LAYOUT_OFFSET = 10; COMMIT_STEP = 40; PX = 4; PY = 2; THEME_COLOR_LIMIT = 8; branchPos = /* @__PURE__ */ new Map(); commitPos = /* @__PURE__ */ new Map(); defaultPos = 30; allCommitsDict = /* @__PURE__ */ new Map(); lanes = []; maxPos = 0; dir = "LR"; clear10 = /* @__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|/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, b2) => a2 <= b2, "comparisonFunc"); targetPosition = Infinity; } else { comparisonFunc = /* @__PURE__ */ __name((a2, b2) => a2 >= b2, "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 y5 = curPos - LAYOUT_OFFSET; commitPos.set(commit2.id, { x: x5, y: y5 }); } }); }, "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 y5 = curPos + LAYOUT_OFFSET; commitPos.set(commit2.id, { x: x5, y: y5 }); return { x: x5, y: y5 }; }, "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 y5 = curPos + defaultPos2; const x5 = branch2.pos; commitPos.set(commit2.id, { x: x5, y: y5 }); }, "setRootPosition"); drawCommitBullet = /* @__PURE__ */ __name((gBullets, commit2, commitPosition, typeClass, branchIndex, commitSymbolType) => { if (commitSymbolType === commitType.HIGHLIGHT) { gBullets.append("rect").attr("x", commitPosition.x - 10).attr("y", commitPosition.y - 10).attr("width", 20).attr("height", 20).attr( "class", `commit ${commit2.id} commit-highlight${branchIndex % THEME_COLOR_LIMIT} ${typeClass}-outer` ); gBullets.append("rect").attr("x", commitPosition.x - 6).attr("y", commitPosition.y - 6).attr("width", 12).attr("height", 12).attr( "class", `commit ${commit2.id} commit${branchIndex % THEME_COLOR_LIMIT} ${typeClass}-inner` ); } else if (commitSymbolType === commitType.CHERRY_PICK) { gBullets.append("circle").attr("cx", commitPosition.x).attr("cy", commitPosition.y).attr("r", 10).attr("class", `commit ${commit2.id} ${typeClass}`); gBullets.append("circle").attr("cx", commitPosition.x - 3).attr("cy", commitPosition.y + 2).attr("r", 2.75).attr("fill", "#fff").attr("class", `commit ${commit2.id} ${typeClass}`); gBullets.append("circle").attr("cx", commitPosition.x + 3).attr("cy", commitPosition.y + 2).attr("r", 2.75).attr("fill", "#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", "#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", "#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", commit2.type === commitType.MERGE ? 9 : 10); circle6.attr("class", `commit ${commit2.id} commit${branchIndex % THEME_COLOR_LIMIT}`); if (commitSymbolType === commitType.MERGE) { const circle22 = gBullets.append("circle"); circle22.attr("cx", commitPosition.x); circle22.attr("cy", commitPosition.y); circle22.attr("r", 6); circle22.attr( "class", `commit ${typeClass} ${commit2.id} commit${branchIndex % THEME_COLOR_LIMIT}` ); } if (commitSymbolType === commitType.REVERSE) { const cross3 = gBullets.append("path"); cross3.attr( "d", `M ${commitPosition.x - 5},${commitPosition.y - 5}L${commitPosition.x + 5},${commitPosition.y + 5}M${commitPosition.x - 5},${commitPosition.y + 5}L${commitPosition.x + 5},${commitPosition.y - 5}` ).attr("class", `commit ${typeClass} ${commit2.id} commit${branchIndex % THEME_COLOR_LIMIT}`); } } }, "drawCommitBullet"); drawCommitLabel = /* @__PURE__ */ __name((gLabels, commit2, commitPosition, pos) => { if (commit2.type !== commitType.CHERRY_PICK && (commit2.customId && commit2.type === commitType.MERGE || commit2.type !== commitType.MERGE) && DEFAULT_GITGRAPH_CONFIG2?.showCommitLabel) { const wrapper = gLabels.append("g"); const labelBkg = wrapper.insert("rect").attr("class", "commit-label-bkg"); const text3 = wrapper.append("text").attr("x", pos).attr("y", commitPosition.y + 25).attr("class", "commit-label").text(commit2.id); const bbox = text3.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); text3.attr("x", commitPosition.x - (bbox.width + 4 * PX)).attr("y", commitPosition.y + bbox.height - 12); } else { text3.attr("x", commitPosition.posWithOffset - bbox.width / 2); } if (DEFAULT_GITGRAPH_CONFIG2.rotateCommitLabel) { if (dir === "TB" || dir === "BT") { text3.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 tag2 = gLabels.append("text").attr("y", commitPosition.y - 16 - yOffset).attr("class", "tag-label").text(tagValue); const tagBbox = tag2.node()?.getBBox(); if (!tagBbox) { throw new Error("Tag bbox not found"); } maxTagBboxWidth = Math.max(maxTagBboxWidth, tagBbox.width); maxTagBboxHeight = Math.max(maxTagBboxHeight, tagBbox.height); tag2.attr("x", commitPosition.posWithOffset - tagBbox.width / 2); tagElements.push({ tag: tag2, hole, rect: rect3, yOffset }); yOffset += 20; } for (const { tag: tag2, hole, rect: rect3, yOffset: yOffset2 } of tagElements) { const h2 = 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 - h2 - PY} ${commitPosition.posWithOffset + maxTagBboxWidth / 2 + PX},${ly - h2 - PY} ${commitPosition.posWithOffset + maxTagBboxWidth / 2 + PX},${ly + h2 + PY} ${commitPosition.posWithOffset - maxTagBboxWidth / 2 - PX},${ly + h2 + 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 - h2 - 2} ${commitPosition.x + LAYOUT_OFFSET + maxTagBboxWidth + 4},${yOrigin - h2 - 2} ${commitPosition.x + LAYOUT_OFFSET + maxTagBboxWidth + 4},${yOrigin + h2 + 2} ${commitPosition.x + LAYOUT_OFFSET},${yOrigin + h2 + 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 + ")"); tag2.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 y5 = dir === "TB" || dir === "BT" ? posWithOffset : branchPos.get(commit2.branch)?.pos; const x5 = dir === "TB" || dir === "BT" ? branchPos.get(commit2.branch)?.pos : posWithOffset; if (x5 === void 0 || y5 === void 0) { throw new Error(`Position were undefined for commit ${commit2.id}`); } return { x: x5, y: y5, posWithOffset }; }, "getCommitPosition"); drawCommits = /* @__PURE__ */ __name((svg, commits, modifyGraph) => { if (!DEFAULT_GITGRAPH_CONFIG2) { throw new Error("GitGraph config not found"); } const gBullets = svg.append("g").attr("class", "commit-bullets"); const gLabels = svg.append("g").attr("class", "commit-labels"); let pos = dir === "TB" || dir === "BT" ? defaultPos : 0; const keys3 = [...commits.keys()]; const isParallelCommits = DEFAULT_GITGRAPH_CONFIG2?.parallelCommits ?? false; const sortKeys = /* @__PURE__ */ __name((a2, b2) => { const seqA = commits.get(a2)?.seq; const seqB = commits.get(b2)?.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); 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((svg, commitA, commitB, allCommits) => { 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} ${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 (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"); } svg.append("path").attr("d", lineDef).attr("class", "arrow arrow" + colorClassNum % THEME_COLOR_LIMIT); }, "drawArrow"); drawArrows = /* @__PURE__ */ __name((svg, commits) => { const gArrows = svg.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((svg, branches) => { const g2 = svg.append("g"); branches.forEach((branch2, index) => { const adjustIndexForTheme = index % THEME_COLOR_LIMIT; const pos = branchPos.get(branch2.name)?.pos; if (pos === void 0) { throw new Error(`Position not found for branch ${branch2.name}`); } const line2 = g2.append("line"); line2.attr("x1", 0); line2.attr("y1", pos); line2.attr("x2", maxPos); line2.attr("y2", pos); 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(pos); 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(); bkg.attr("class", "branchLabelBkg label" + adjustIndexForTheme).attr("rx", 4).attr("ry", 4).attr("x", -bbox.width - 4 - (DEFAULT_GITGRAPH_CONFIG2?.rotateCommitLabel === true ? 30 : 0)).attr("y", -bbox.height / 2 + 8).attr("width", bbox.width + 18).attr("height", bbox.height + 4); label.attr( "transform", "translate(" + (-bbox.width - 14 - (DEFAULT_GITGRAPH_CONFIG2?.rotateCommitLabel === true ? 30 : 0)) + ", " + (pos - bbox.height / 2 - 1) + ")" ); if (dir === "TB") { bkg.attr("x", pos - bbox.width / 2 - 10).attr("y", 0); label.attr("transform", "translate(" + (pos - bbox.width / 2 - 5) + ", 0)"); } 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 + ")"); } else { bkg.attr("transform", "translate(-19, " + (pos - bbox.height / 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, id28, ver, diagObj) { clear10(); log.debug("in gitgraph renderer", txt + "\n", "id:", id28, ver); if (!DEFAULT_GITGRAPH_CONFIG2) { throw new Error("GitGraph config not found"); } const rotateCommitLabel = DEFAULT_GITGRAPH_CONFIG2.rotateCommitLabel ?? false; const db9 = diagObj.db; allCommitsDict = db9.getCommits(); const branches = db9.getBranchesAsObjArray(); dir = db9.getDirection(); const diagram25 = select_default2(`[id="${id28}"]`); let pos = 0; branches.forEach((branch2, index) => { const labelElement = drawText2(branch2.name); const g2 = diagram25.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(diagram25, allCommitsDict, false); if (DEFAULT_GITGRAPH_CONFIG2.showBranches) { drawBranches(diagram25, branches); } drawArrows(diagram25, allCommitsDict); drawCommits(diagram25, allCommitsDict, true); utils_default2.insertTitle( diagram25, "gitTitleText", DEFAULT_GITGRAPH_CONFIG2.titleTopMargin ?? 0, db9.getDiagramTitle() ); setupGraphViewbox2( void 0, diagram25, DEFAULT_GITGRAPH_CONFIG2.diagramPadding, DEFAULT_GITGRAPH_CONFIG2.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 }); DEFAULT_GITGRAPH_CONFIG2.parallelCommits = true; 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)); }); }); }); DEFAULT_GITGRAPH_CONFIG2.parallelCommits = false; 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 getStyles5, styles_default5; var init_styles5 = __esm({ "src/diagrams/git/styles.js"() { "use strict"; getStyles5 = /* @__PURE__ */ __name((options3) => ` .commit-id, .commit-msg, .branch-label { fill: lightgrey; color: lightgrey; font-family: 'trebuchet ms', verdana, arial, sans-serif; font-family: var(--mermaid-font-family); } ${[0, 1, 2, 3, 4, 5, 6, 7].map( (i2) => ` .branch-label${i2} { fill: ${options3["gitBranchLabel" + i2]}; } .commit${i2} { stroke: ${options3["git" + i2]}; fill: ${options3["git" + i2]}; } .commit-highlight${i2} { stroke: ${options3["gitInv" + i2]}; fill: ${options3["gitInv" + i2]}; } .label${i2} { fill: ${options3["git" + i2]}; } .arrow${i2} { stroke: ${options3["git" + i2]}; } ` ).join("\n")} .branch { stroke-width: 1; stroke: ${options3.lineColor}; stroke-dasharray: 2; } .commit-label { font-size: ${options3.commitLabelFontSize}; fill: ${options3.commitLabelColor};} .commit-label-bkg { font-size: ${options3.commitLabelFontSize}; fill: ${options3.commitLabelBackground}; opacity: 0.5; } .tag-label { font-size: ${options3.tagLabelFontSize}; fill: ${options3.tagLabelColor};} .tag-label-bkg { fill: ${options3.tagLabelBackground}; stroke: ${options3.tagLabelBorder}; } .tag-hole { fill: ${options3.textColor}; } .commit-merge { stroke: ${options3.primaryColor}; fill: ${options3.primaryColor}; } .commit-reverse { stroke: ${options3.primaryColor}; fill: ${options3.primaryColor}; stroke-width: 3; } .commit-highlight-outer { } .commit-highlight-inner { stroke: ${options3.primaryColor}; fill: ${options3.primaryColor}; } .arrow { stroke-width: 8; stroke-linecap: round; fill: none} .gitTitleText { text-anchor: middle; font-size: 18px; fill: ${options3.textColor}; } `, "getStyles"); styles_default5 = getStyles5; } }); // src/diagrams/git/gitGraphDiagram.ts var gitGraphDiagram_exports = {}; __export(gitGraphDiagram_exports, { diagram: () => diagram4 }); var diagram4; var init_gitGraphDiagram = __esm({ "src/diagrams/git/gitGraphDiagram.ts"() { "use strict"; init_gitGraphParser(); init_gitGraphAst(); init_gitGraphRenderer(); init_styles5(); diagram4 = { parser: parser5, db, renderer: gitGraphRenderer_default, styles: styles_default5 }; } }); // src/diagrams/gantt/parser/gantt.jison var parser6, gantt_default; var init_gantt = __esm({ "src/diagrams/gantt/parser/gantt.jison"() { "use strict"; parser6 = function() { var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l2) { for (o3 = o3 || {}, l2 = k2.length; l2--; o3[k2[l2]] = 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 parser23 = { 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 parse8(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 lexer3 = 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]; } } lexer3.setInput(input, sharedState.yy); sharedState.yy.lexer = lexer3; sharedState.yy.parser = this; if (typeof lexer3.yylloc == "undefined") { lexer3.yylloc = {}; } var yyloc = lexer3.yylloc; lstack.push(yyloc); var ranges = lexer3.options && lexer3.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 lex2() { var token2; token2 = tstack.pop() || lexer3.lex() || EOF2; if (typeof token2 !== "number") { if (token2 instanceof Array) { tstack = token2; token2 = tstack.pop(); } token2 = self2.symbols_[token2] || token2; } return token2; } __name(lex2, "lex"); var symbol, preErrorSymbol, state5, action, a2, r2, yyval = {}, p3, len, newState2, expected; while (true) { state5 = stack[stack.length - 1]; if (this.defaultActions[state5]) { action = this.defaultActions[state5]; } else { if (symbol === null || typeof symbol == "undefined") { symbol = lex2(); } action = table[state5] && table[state5][symbol]; } if (typeof action === "undefined" || !action.length || !action[0]) { var errStr = ""; expected = []; for (p3 in table[state5]) { if (this.terminals_[p3] && p3 > TERROR) { expected.push("'" + this.terminals_[p3] + "'"); } } if (lexer3.showPosition) { errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer3.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: lexer3.match, token: this.terminals_[symbol] || symbol, line: lexer3.yylineno, loc: yyloc, expected }); } if (action[0] instanceof Array && action.length > 1) { throw new Error("Parse Error: multiple actions possible at state: " + state5 + ", token: " + symbol); } switch (action[0]) { case 1: stack.push(symbol); vstack.push(lexer3.yytext); lstack.push(lexer3.yylloc); stack.push(action[1]); symbol = null; if (!preErrorSymbol) { yyleng = lexer3.yyleng; yytext = lexer3.yytext; yylineno = lexer3.yylineno; yyloc = lexer3.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 lexer2 = /* @__PURE__ */ function() { var lexer3 = { 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(match2, 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 = match2[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 + match2[0].length }; this.yytext += match2[0]; this.match += match2[0]; this.matches = match2; 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(match2[0].length); this.matched += match2[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, match2, tempMatch, index; if (!this._more) { this.yytext = ""; this.match = ""; } var rules = this._currentRules(); for (var i2 = 0; i2 < rules.length; i2++) { tempMatch = this._input.match(this.rules[rules[i2]]); if (tempMatch && (!match2 || tempMatch[0].length > match2[0].length)) { match2 = tempMatch; index = i2; if (this.options.backtrack_lexer) { token2 = this.test_match(tempMatch, rules[i2]); if (token2 !== false) { return token2; } else if (this._backtrack) { match2 = false; continue; } else { return false; } } else if (!this.options.flex) { break; } } } if (match2) { token2 = this.test_match(match2, rules[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 lex2() { 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 lexer3; }(); parser23.lexer = lexer2; function Parser3() { this.yy = {}; } __name(Parser3, "Parser"); Parser3.prototype = parser23; parser23.Parser = Parser3; return new Parser3(); }(); parser6.parser = parser6; gantt_default = parser6; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/dayjs/plugin/isoWeek.js var require_isoWeek = __commonJS({ "../../node_modules/.pnpm/[email protected]/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"), d2 = i2.prototype; d2.isoWeekYear = function() { return a2(this).year(); }, d2.isoWeek = function(t5) { if (!this.$utils().u(t5)) return this.add(7 * (t5 - this.isoWeek()), e3); var i3, d3, n3, o2, r2 = a2(this), u2 = (i3 = this.isoWeekYear(), d3 = this.$u, n3 = (d3 ? 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; }, d2.isoWeekday = function(e4) { return this.$utils().u(e4) ? this.day() || 7 : this.day(this.day() % 7 ? e4 : e4 - 7); }; var n2 = d2.startOf; d2.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/[email protected]/node_modules/dayjs/plugin/customParseFormat.js var require_customParseFormat = __commonJS({ "../../node_modules/.pnpm/[email protected]/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 f3 = /* @__PURE__ */ __name(function(e4) { return function(t5) { this[e4] = +t5; }; }, "f"), h2 = [/[+-]\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"), d2 = /* @__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 = d2(e4, false); }], a: [o2, function(e4) { this.afternoon = d2(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, f3("seconds")], ss: [i2, f3("seconds")], m: [i2, f3("minutes")], mm: [i2, f3("minutes")], H: [i2, f3("hours")], h: [i2, f3("hours")], HH: [i2, f3("hours")], hh: [i2, f3("hours")], D: [i2, f3("day")], DD: [r2, f3("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, f3("week")], ww: [r2, f3("week")], M: [i2, f3("month")], MM: [r2, f3("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+/, f3("year")], YY: [r2, function(e4) { this.year = a2(e4); }], YYYY: [/\d{4}/, f3("year")], Z: h2, ZZ: h2 }; function l2(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, f4 = 0; f4 < a3; f4 += 1) { var h3 = o3[f4], u3 = c3[h3], d3 = u3 && u3[0], l3 = u3 && u3[1]; o3[f4] = l3 ? { regex: d3, parser: l3 } : h3.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, f5 = i4.parser, h4 = e4.slice(r4), u4 = s3.exec(h4)[0]; f5.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(l2, "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 f4 = true === o3[2], h3 = true === o3[3], u3 = f4 || h3, d3 = o3[2]; h3 && (d3 = o3[2]), s2 = this.$locale(), !f4 && d3 && (s2 = n3.Ls[d3]), this.$d = function(e7, t7, n4, r5) { try { if (["x", "X"].indexOf(t7) > -1) return new Date(("X" === t7 ? 1e3 : 1) * e7); var i4 = l2(t7)(e7), o4 = i4.year, s3 = i4.month, a4 = i4.day, f5 = i4.hours, h4 = i4.minutes, u4 = i4.seconds, d4 = i4.milliseconds, c5 = i4.zone, m3 = i4.week, M3 = /* @__PURE__ */ new Date(), Y3 = a4 || (o4 || s3 ? 1 : M3.getDate()), p3 = o4 || M3.getFullYear(), v3 = 0; o4 && !s3 || (v3 = s3 > 0 ? s3 - 1 : M3.getMonth()); var D3, w3 = f5 || 0, g2 = h4 || 0, y5 = u4 || 0, L2 = d4 || 0; return c5 ? new Date(Date.UTC(p3, v3, Y3, w3, g2, y5, L2 + 60 * c5.offset * 1e3)) : n4 ? new Date(Date.UTC(p3, v3, Y3, w3, g2, y5, L2)) : (D3 = new Date(p3, v3, Y3, w3, g2, y5, L2), m3 && (D3 = r5(D3).week(m3).toDate()), D3); } catch (e8) { return /* @__PURE__ */ new Date(""); } }(t6, a3, r4, n3), this.init(), d3 && true !== d3 && (this.$L = this.locale(d3).$L), u3 && t6 != this.format(a3) && (this.$d = /* @__PURE__ */ new Date("")), s2 = {}; } else if (a3 instanceof Array) for (var c4 = a3.length, m2 = 1; m2 <= c4; m2 += 1) { o3[1] = a3[m2 - 1]; var M2 = n3.apply(this, o3); if (M2.isValid()) { this.$d = M2.$d, this.$L = M2.$L, this.init(); break; } m2 === c4 && (this.$d = /* @__PURE__ */ new Date("")); } else i3.call(this, e6); }; }; }); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/dayjs/plugin/advancedFormat.js var require_advancedFormat = __commonJS({ "../../node_modules/.pnpm/[email protected]/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(data5, task, tags2) { let matchFound = true; while (matchFound) { matchFound = false; tags2.forEach(function(t4) { const pattern = "^\\s*" + t4 + "\\s*$"; const regex2 = new RegExp(pattern); if (data5[0].match(regex2)) { task[t4] = true; data5.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, funs2, inclusiveEndDates, topAxis, weekday, weekend, lastOrder, clear11, setAxisFormat, getAxisFormat, setTickInterval, getTickInterval, setTodayMarker, getTodayMarker, setDateFormat, enableInclusiveEndDates, endDatesAreInclusive, enableTopAxis, topAxisEnabled, setDisplayMode, getDisplayMode, getDateFormat, 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, setLink2, setClass2, setClickFun2, pushFun, setClickEvent2, bindFunctions2, 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"]; funs2 = []; inclusiveEndDates = false; topAxis = false; weekday = "sunday"; weekend = "saturday"; lastOrder = 0; clear11 = /* @__PURE__ */ __name(function() { sections = []; tasks = []; currentSection = ""; funs2 = []; 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(); clear(); weekday = "sunday"; weekend = "saturday"; }, "clear"); 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"); setIncludes = /* @__PURE__ */ __name(function(txt) { includes2 = txt.toLowerCase().split(/[\s,]+/); }, "setIncludes"); getIncludes = /* @__PURE__ */ __name(function() { return includes2; }, "getIncludes"); setExcludes = /* @__PURE__ */ __name(function(txt) { excludes = txt.toLowerCase().split(/[\s,]+/); }, "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) { if (includes3.includes(date2.format(dateFormat2.trim()))) { 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(date2.format(dateFormat2.trim())); }, "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; while (startTime <= endTime) { if (!invalid) { renderEndTime = endTime.toDate(); } invalid = isInvalidDate(startTime, dateFormat2, excludes2, includes3); if (invalid) { endTime = endTime.add(1, "d"); } startTime = startTime.add(1, "d"); } return [endTime, renderEndTime]; }, "fixTaskDates"); getStartDate = /* @__PURE__ */ __name(function(prevTime, dateFormat2, str2) { str2 = str2.trim(); const afterRePattern = /^after\s+(?[\d\w- ]+)/; const afterStatement = afterRePattern.exec(str2); if (afterStatement !== null) { let latestTask = null; for (const id28 of afterStatement.groups.ids.split(" ")) { let task = findTaskById(id28); 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 d2 = new Date(str2); if (d2 === void 0 || isNaN(d2.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. d2.getFullYear() < -1e4 || d2.getFullYear() > 1e4) { throw new Error("Invalid date:" + str2); } return d2; } }, "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+(?[\d\w- ]+)/; const untilStatement = untilRePattern.exec(str2); if (untilStatement !== null) { let earliestTask = null; for (const id28 of untilStatement.groups.ids.split(" ")) { let task = findTaskById(id28); 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 data5 = ds.split(","); const task = {}; getTaskTags(data5, task, tags); for (let i2 = 0; i2 < data5.length; i2++) { data5[i2] = data5[i2].trim(); } let endTimeData = ""; switch (data5.length) { case 1: task.id = parseId(); task.startTime = prevTask.endTime; endTimeData = data5[0]; break; case 2: task.id = parseId(); task.startTime = getStartDate(void 0, dateFormat, data5[0]); endTimeData = data5[1]; break; case 3: task.id = parseId(data5[0]); task.startTime = getStartDate(void 0, dateFormat, data5[1]); endTimeData = data5[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 data5 = ds.split(","); const task = {}; getTaskTags(data5, task, tags); for (let i2 = 0; i2 < data5.length; i2++) { data5[i2] = data5[i2].trim(); } switch (data5.length) { case 1: task.id = parseId(); task.startTime = { type: "prevTaskEnd", id: prevTaskId }; task.endTime = { data: data5[0] }; break; case 2: task.id = parseId(); task.startTime = { type: "getStartDate", startData: data5[0] }; task.endTime = { data: data5[1] }; break; case 3: task.id = parseId(data5[0]); task.startTime = { type: "getStartDate", startData: data5[1] }; task.endTime = { data: data5[2] }; break; default: } return task; }, "parseData"); rawTasks = []; taskDb = {}; addTask = /* @__PURE__ */ __name(function(descr, data5) { const rawTask = { section: currentSection, type: currentSection, processed: false, manualEndTime: false, renderEndTime: null, raw: { data: data5 }, task: descr, classes: [] }; const taskInfo = parseData(lastTaskID, data5); 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.order = lastOrder; lastOrder++; const pos = rawTasks.push(rawTask); lastTaskID = rawTask.id; taskDb[rawTask.id] = pos - 1; }, "addTask"); findTaskById = /* @__PURE__ */ __name(function(id28) { const pos = taskDb[id28]; return rawTasks[pos]; }, "findTaskById"); addTaskOrg = /* @__PURE__ */ __name(function(descr, data5) { const newTask = { section: currentSection, type: currentSection, description: descr, task: descr, classes: [] }; const taskInfo = compileData(lastTask, data5); 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; 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"); setLink2 = /* @__PURE__ */ __name(function(ids, _linkStr) { let linkStr = _linkStr; if (getConfig2().securityLevel !== "loose") { linkStr = (0, import_sanitize_url4.sanitizeUrl)(_linkStr); } ids.split(",").forEach(function(id28) { let rawTask = findTaskById(id28); if (rawTask !== void 0) { pushFun(id28, () => { window.open(linkStr, "_self"); }); links.set(id28, linkStr); } }); setClass2(ids, "clickable"); }, "setLink"); setClass2 = /* @__PURE__ */ __name(function(ids, className) { ids.split(",").forEach(function(id28) { let rawTask = findTaskById(id28); if (rawTask !== void 0) { rawTask.classes.push(className); } }); }, "setClass"); setClickFun2 = /* @__PURE__ */ __name(function(id28, 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(id28); } let rawTask = findTaskById(id28); if (rawTask !== void 0) { pushFun(id28, () => { utils_default2.runFunc(functionName, ...argList); }); } }, "setClickFun"); pushFun = /* @__PURE__ */ __name(function(id28, callbackFunction) { funs2.push( function() { const elem = document.querySelector(`[id="${id28}"]`); if (elem !== null) { elem.addEventListener("click", function() { callbackFunction(); }); } }, function() { const elem = document.querySelector(`[id="${id28}-text"]`); if (elem !== null) { elem.addEventListener("click", function() { callbackFunction(); }); } } ); }, "pushFun"); setClickEvent2 = /* @__PURE__ */ __name(function(ids, functionName, functionArgs) { ids.split(",").forEach(function(id28) { setClickFun2(id28, functionName, functionArgs); }); setClass2(ids, "clickable"); }, "setClickEvent"); bindFunctions2 = /* @__PURE__ */ __name(function(element3) { funs2.forEach(function(fun) { fun(element3); }); }, "bindFunctions"); ganttDb_default = { getConfig: /* @__PURE__ */ __name(() => getConfig2().gantt, "getConfig"), clear: clear11, setDateFormat, getDateFormat, enableInclusiveEndDates, endDatesAreInclusive, enableTopAxis, topAxisEnabled, setAxisFormat, getAxisFormat, setTickInterval, getTickInterval, setTodayMarker, getTodayMarker, setAccTitle, getAccTitle, setDiagramTitle, getDiagramTitle, setDisplayMode, getDisplayMode, setAccDescription, getAccDescription, addSection, getSections, getTasks, addTask, findTaskById, addTaskOrg, setIncludes, getIncludes, setExcludes, getExcludes, setClickEvent: setClickEvent2, setLink: setLink2, getLinks, bindFunctions: bindFunctions2, parseDuration, isInvalidDate, setWeekday, getWeekday, setWeekend }; __name(getTaskTags, "getTaskTags"); } }); // src/diagrams/gantt/ganttRenderer.js var import_dayjs3, setConf3, mapWeekdayToTimeFunction, getMaxIntersections, w2, draw5, ganttRenderer_default; var init_ganttRenderer = __esm({ "src/diagrams/gantt/ganttRenderer.js"() { "use strict"; import_dayjs3 = __toESM(require_dayjs_min(), 1); init_logger(); init_src32(); init_common(); init_diagramAPI(); init_setupGraphViewbox(); setConf3 = /* @__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, b2) => a2.startTime - b2.startTime || a2.order - b2.order); let maxIntersections = 0; for (const element3 of sorted) { for (let j2 = 0; j2 < timeline.length; j2++) { if (element3.startTime >= timeline[j2]) { timeline[j2] = element3.endTime; element3.order = j2 + orderOffset; if (j2 > maxIntersections) { maxIntersections = j2; } break; } } } return maxIntersections; }, "getMaxIntersections"); draw5 = /* @__PURE__ */ __name(function(text3, id28, version4, diagObj) { const conf7 = getConfig2().gantt; const securityLevel = getConfig2().securityLevel; let sandboxElement; if (securityLevel === "sandbox") { sandboxElement = select_default2("#i" + id28); } 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(id28); w2 = elem.parentElement.offsetWidth; if (w2 === void 0) { w2 = 1200; } if (conf7.useWidth !== void 0) { w2 = conf7.useWidth; } const taskArray = diagObj.db.getTasks(); let categories = []; for (const element3 of taskArray) { categories.push(element3.type); } categories = checkUnique(categories); const categoryHeights = {}; let h2 = 2 * conf7.topPadding; if (diagObj.db.getDisplayMode() === "compact" || conf7.displayMode === "compact") { const categoryElements = {}; for (const element3 of taskArray) { 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; h2 += categoryHeight * (conf7.barHeight + conf7.barGap); categoryHeights[category] = categoryHeight; } } else { h2 += taskArray.length * (conf7.barHeight + conf7.barGap); for (const category of categories) { categoryHeights[category] = taskArray.filter((task) => task.type === category).length; } } elem.setAttribute("viewBox", "0 0 " + w2 + " " + h2); const svg = root4.select(`[id="${id28}"]`); const timeScale = time().domain([ min(taskArray, function(d2) { return d2.startTime; }), max(taskArray, function(d2) { return d2.endTime; }) ]).rangeRound([0, w2 - conf7.leftPadding - conf7.rightPadding]); function taskCompare(a2, b2) { const taskA = a2.startTime; const taskB = b2.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, w2, h2); configureSvgSize(svg, h2, w2, conf7.useMaxWidth); svg.append("text").text(diagObj.db.getDiagramTitle()).attr("x", w2 / 2).attr("y", conf7.titleTopMargin).attr("class", "titleText"); function makeGantt(tasks4, pageWidth, pageHeight) { const barHeight = conf7.barHeight; const gap = barHeight + conf7.barGap; const topPadding = conf7.topPadding; const leftPadding = conf7.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, w3) { const uniqueTaskOrderIds = [...new Set(theArray.map((item) => item.order))]; const uniqueTasks = uniqueTaskOrderIds.map((id29) => theArray.find((item) => item.order === id29)); svg.append("g").selectAll("rect").data(uniqueTasks).enter().append("rect").attr("x", 0).attr("y", function(d2, i2) { i2 = d2.order; return i2 * theGap + theTopPad - 2; }).attr("width", function() { return w3 - conf7.rightPadding / 2; }).attr("height", theGap).attr("class", function(d2) { for (const [i2, category] of categories.entries()) { if (d2.type === category) { return "section section" + i2 % conf7.numberSectionStyles; } } return "section section0"; }); const rectangles = svg.append("g").selectAll("rect").data(theArray).enter(); const links3 = diagObj.db.getLinks(); rectangles.append("rect").attr("id", function(d2) { return d2.id; }).attr("rx", 3).attr("ry", 3).attr("x", function(d2) { if (d2.milestone) { return timeScale(d2.startTime) + theSidePad + 0.5 * (timeScale(d2.endTime) - timeScale(d2.startTime)) - 0.5 * theBarHeight; } return timeScale(d2.startTime) + theSidePad; }).attr("y", function(d2, i2) { i2 = d2.order; return i2 * theGap + theTopPad; }).attr("width", function(d2) { if (d2.milestone) { return theBarHeight; } return timeScale(d2.renderEndTime || d2.endTime) - timeScale(d2.startTime); }).attr("height", theBarHeight).attr("transform-origin", function(d2, i2) { i2 = d2.order; return (timeScale(d2.startTime) + theSidePad + 0.5 * (timeScale(d2.endTime) - timeScale(d2.startTime))).toString() + "px " + (i2 * theGap + theTopPad + 0.5 * theBarHeight).toString() + "px"; }).attr("class", function(d2) { const res = "task"; let classStr = ""; if (d2.classes.length > 0) { classStr = d2.classes.join(" "); } let secNum = 0; for (const [i2, category] of categories.entries()) { if (d2.type === category) { secNum = i2 % conf7.numberSectionStyles; } } let taskClass = ""; if (d2.active) { if (d2.crit) { taskClass += " activeCrit"; } else { taskClass = " active"; } } else if (d2.done) { if (d2.crit) { taskClass = " doneCrit"; } else { taskClass = " done"; } } else { if (d2.crit) { taskClass += " crit"; } } if (taskClass.length === 0) { taskClass = " task"; } if (d2.milestone) { taskClass = " milestone " + taskClass; } taskClass += secNum; taskClass += " " + classStr; return res + taskClass; }); rectangles.append("text").attr("id", function(d2) { return d2.id + "-text"; }).text(function(d2) { return d2.task; }).attr("font-size", conf7.fontSize).attr("x", function(d2) { let startX2 = timeScale(d2.startTime); let endX = timeScale(d2.renderEndTime || d2.endTime); if (d2.milestone) { startX2 += 0.5 * (timeScale(d2.endTime) - timeScale(d2.startTime)) - 0.5 * theBarHeight; } if (d2.milestone) { endX = startX2 + theBarHeight; } const textWidth = this.getBBox().width; if (textWidth > endX - startX2) { if (endX + textWidth + 1.5 * conf7.leftPadding > w3) { return startX2 + theSidePad - 5; } else { return endX + theSidePad + 5; } } else { return (endX - startX2) / 2 + startX2 + theSidePad; } }).attr("y", function(d2, i2) { i2 = d2.order; return i2 * theGap + conf7.barHeight / 2 + (conf7.fontSize / 2 - 2) + theTopPad; }).attr("text-height", theBarHeight).attr("class", function(d2) { const startX2 = timeScale(d2.startTime); let endX = timeScale(d2.endTime); if (d2.milestone) { endX = startX2 + theBarHeight; } const textWidth = this.getBBox().width; let classStr = ""; if (d2.classes.length > 0) { classStr = d2.classes.join(" "); } let secNum = 0; for (const [i2, category] of categories.entries()) { if (d2.type === category) { secNum = i2 % conf7.numberSectionStyles; } } let taskType = ""; if (d2.active) { if (d2.crit) { taskType = "activeCritText" + secNum; } else { taskType = "activeText" + secNum; } } if (d2.done) { if (d2.crit) { taskType = taskType + " doneCritText" + secNum; } else { taskType = taskType + " doneText" + secNum; } } else { if (d2.crit) { taskType = taskType + " critText" + secNum; } } if (d2.milestone) { taskType += " milestoneText"; } if (textWidth > endX - startX2) { if (endX + textWidth + 1.5 * conf7.leftPadding > w3) { 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" + id28); const doc2 = sandboxElement2.nodes()[0].contentDocument; rectangles.filter(function(d2) { return links3.has(d2.id); }).each(function(o2) { var taskRect = doc2.querySelector("#" + o2.id); var taskText = doc2.querySelector("#" + o2.id + "-text"); const oldParent = taskRect.parentNode; var Link = doc2.createElement("a"); Link.setAttribute("xlink:href", links3.get(o2.id)); Link.setAttribute("target", "_top"); oldParent.appendChild(Link); Link.appendChild(taskRect); Link.appendChild(taskText); }); } } __name(drawRects, "drawRects"); function drawExcludeDays(theGap, theTopPad, theSidePad, w3, h3, 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 d2 = (0, import_dayjs3.default)(minTime); while (d2.valueOf() <= maxTime) { if (diagObj.db.isInvalidDate(d2, dateFormat2, excludes2, includes3)) { if (!range3) { range3 = { start: d2, end: d2 }; } else { range3.end = d2; } } else { if (range3) { excludeRanges.push(range3); range3 = null; } } d2 = d2.add(1, "d"); } const rectangles = svg.append("g").selectAll("rect").data(excludeRanges).enter(); rectangles.append("rect").attr("id", function(d3) { return "exclude-" + d3.start.format("YYYY-MM-DD"); }).attr("x", function(d3) { return timeScale(d3.start) + theSidePad; }).attr("y", conf7.gridLineStartPadding).attr("width", function(d3) { const renderEnd = d3.end.add(1, "day"); return timeScale(renderEnd) - timeScale(d3.start); }).attr("height", h3 - theTopPad - conf7.gridLineStartPadding).attr("transform-origin", function(d3, i2) { return (timeScale(d3.start) + theSidePad + 0.5 * (timeScale(d3.end) - timeScale(d3.start))).toString() + "px " + (i2 * theGap + 0.5 * h3).toString() + "px"; }).attr("class", "exclude-range"); } __name(drawExcludeDays, "drawExcludeDays"); function makeGrid(theSidePad, theTopPad, w3, h3) { let bottomXAxis = axisBottom(timeScale).tickSize(-h3 + theTopPad + conf7.gridLineStartPadding).tickFormat(timeFormat(diagObj.db.getAxisFormat() || conf7.axisFormat || "%Y-%m-%d")); const reTickInterval = /^([1-9]\d*)(millisecond|second|minute|hour|day|week|month)$/; const resultTickInterval = reTickInterval.exec( diagObj.db.getTickInterval() || conf7.tickInterval ); if (resultTickInterval !== null) { const every3 = resultTickInterval[1]; const interval2 = resultTickInterval[2]; const weekday2 = diagObj.db.getWeekday() || conf7.weekday; 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; } } svg.append("g").attr("class", "grid").attr("transform", "translate(" + theSidePad + ", " + (h3 - 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() || conf7.topAxis) { let topXAxis = axisTop(timeScale).tickSize(-h3 + theTopPad + conf7.gridLineStartPadding).tickFormat(timeFormat(diagObj.db.getAxisFormat() || conf7.axisFormat || "%Y-%m-%d")); if (resultTickInterval !== null) { const every3 = resultTickInterval[1]; const interval2 = resultTickInterval[2]; const weekday2 = diagObj.db.getWeekday() || conf7.weekday; 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; } } svg.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((d2) => [d2, categoryHeights[d2]]); svg.append("g").selectAll("text").data(numOccurrences).enter().append(function(d2) { const rows = d2[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 [j2, 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 (j2 > 0) { tspan.setAttribute("dy", "1em"); } tspan.textContent = row; svgLabel.appendChild(tspan); } return svgLabel; }).attr("x", 10).attr("y", function(d2, i2) { if (i2 > 0) { for (let j2 = 0; j2 < i2; j2++) { prevGap += numOccurrences[i2 - 1][1]; return d2[1] * theGap / 2 + prevGap * theGap + theTopPad; } } else { return d2[1] * theGap / 2 + theTopPad; } }).attr("font-size", conf7.sectionFontSize).attr("class", function(d2) { for (const [i2, category] of categories.entries()) { if (d2[0] === category) { return "sectionTitle sectionTitle" + i2 % conf7.numberSectionStyles; } } return "sectionTitle"; }); } __name(vertLabels, "vertLabels"); function drawToday(theSidePad, theTopPad, w3, h3) { const todayMarker2 = diagObj.db.getTodayMarker(); if (todayMarker2 === "off") { return; } const todayG = svg.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", conf7.titleTopMargin).attr("y2", h3 - conf7.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, l2 = arr.length; i2 < l2; ++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: setConf3, draw: draw5 }; } }); // src/diagrams/gantt/styles.js var getStyles6, styles_default6; var init_styles6 = __esm({ "src/diagrams/gantt/styles.js"() { "use strict"; getStyles6 = /* @__PURE__ */ __name((options3) => ` .mermaid-main-font { font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); } .exclude-range { fill: ${options3.excludeBkgColor}; } .section { stroke: none; opacity: 0.2; } .section0 { fill: ${options3.sectionBkgColor}; } .section2 { fill: ${options3.sectionBkgColor2}; } .section1, .section3 { fill: ${options3.altSectionBkgColor}; opacity: 0.2; } .sectionTitle0 { fill: ${options3.titleColor}; } .sectionTitle1 { fill: ${options3.titleColor}; } .sectionTitle2 { fill: ${options3.titleColor}; } .sectionTitle3 { fill: ${options3.titleColor}; } .sectionTitle { text-anchor: start; font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); } /* Grid and axis */ .grid .tick { stroke: ${options3.gridColor}; opacity: 0.8; shape-rendering: crispEdges; } .grid .tick text { font-family: ${options3.fontFamily}; fill: ${options3.textColor}; } .grid path { stroke-width: 0; } /* Today line */ .today { fill: none; stroke: ${options3.todayLineColor}; stroke-width: 2px; } /* Task styling */ /* Default task */ .task { stroke-width: 2; } .taskText { text-anchor: middle; font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); } .taskTextOutsideRight { fill: ${options3.taskTextDarkColor}; text-anchor: start; font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); } .taskTextOutsideLeft { fill: ${options3.taskTextDarkColor}; text-anchor: end; } /* Special case clickable */ .task.clickable { cursor: pointer; } .taskText.clickable { cursor: pointer; fill: ${options3.taskTextClickableColor} !important; font-weight: bold; } .taskTextOutsideLeft.clickable { cursor: pointer; fill: ${options3.taskTextClickableColor} !important; font-weight: bold; } .taskTextOutsideRight.clickable { cursor: pointer; fill: ${options3.taskTextClickableColor} !important; font-weight: bold; } /* Specific task settings for the sections*/ .taskText0, .taskText1, .taskText2, .taskText3 { fill: ${options3.taskTextColor}; } .task0, .task1, .task2, .task3 { fill: ${options3.taskBkgColor}; stroke: ${options3.taskBorderColor}; } .taskTextOutside0, .taskTextOutside2 { fill: ${options3.taskTextOutsideColor}; } .taskTextOutside1, .taskTextOutside3 { fill: ${options3.taskTextOutsideColor}; } /* Active task */ .active0, .active1, .active2, .active3 { fill: ${options3.activeTaskBkgColor}; stroke: ${options3.activeTaskBorderColor}; } .activeText0, .activeText1, .activeText2, .activeText3 { fill: ${options3.taskTextDarkColor} !important; } /* Completed task */ .done0, .done1, .done2, .done3 { stroke: ${options3.doneTaskBorderColor}; fill: ${options3.doneTaskBkgColor}; stroke-width: 2; } .doneText0, .doneText1, .doneText2, .doneText3 { fill: ${options3.taskTextDarkColor} !important; } /* Tasks on the critical line */ .crit0, .crit1, .crit2, .crit3 { stroke: ${options3.critBorderColor}; fill: ${options3.critBkgColor}; stroke-width: 2; } .activeCrit0, .activeCrit1, .activeCrit2, .activeCrit3 { stroke: ${options3.critBorderColor}; fill: ${options3.activeTaskBkgColor}; stroke-width: 2; } .doneCrit0, .doneCrit1, .doneCrit2, .doneCrit3 { stroke: ${options3.critBorderColor}; fill: ${options3.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: ${options3.taskTextDarkColor} !important; } .activeCritText0, .activeCritText1, .activeCritText2, .activeCritText3 { fill: ${options3.taskTextDarkColor} !important; } .titleText { text-anchor: middle; font-size: 18px; fill: ${options3.titleColor || options3.textColor}; font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); } `, "getStyles"); styles_default6 = getStyles6; } }); // src/diagrams/gantt/ganttDiagram.ts var ganttDiagram_exports = {}; __export(ganttDiagram_exports, { diagram: () => diagram5 }); var diagram5; var init_ganttDiagram = __esm({ "src/diagrams/gantt/ganttDiagram.ts"() { "use strict"; init_gantt(); init_ganttDb(); init_ganttRenderer(); init_styles6(); diagram5 = { parser: gantt_default, db: ganttDb_default, renderer: ganttRenderer_default, styles: styles_default6 }; } }); // src/diagrams/info/infoParser.ts var parser7; var init_infoParser = __esm({ "src/diagrams/info/infoParser.ts"() { "use strict"; init_mermaid_parser_core(); init_logger(); parser7 = { parse: /* @__PURE__ */ __name(async (input) => { const ast = await parse2("info", input); log.debug(ast); }, "parse") }; } }); // package.json var version2; var init_package = __esm({ "package.json"() { version2 = "11.4.0"; } }); // src/diagrams/info/infoDb.ts var DEFAULT_INFO_DB, getVersion, db2; var init_infoDb = __esm({ "src/diagrams/info/infoDb.ts"() { "use strict"; init_package(); DEFAULT_INFO_DB = { version: version2 }; 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((id28) => { const { securityLevel } = getConfig2(); let root4 = select_default2("body"); if (securityLevel === "sandbox") { const sandboxElement = select_default2(`#i${id28}`); const doc = sandboxElement.node()?.contentDocument ?? document; root4 = select_default2(doc.body); } const svg = root4.select(`#${id28}`); return svg; }, "selectSvgElement"); } }); // src/diagrams/info/infoRenderer.ts var draw6, renderer; var init_infoRenderer = __esm({ "src/diagrams/info/infoRenderer.ts"() { "use strict"; init_logger(); init_selectSvgElement(); init_setupGraphViewbox(); draw6 = /* @__PURE__ */ __name((text3, id28, version4) => { log.debug("rendering info diagram\n" + text3); const svg = selectSvgElement(id28); configureSvgSize(svg, 100, 400, true); const group2 = svg.append("g"); group2.append("text").attr("x", 100).attr("y", 40).attr("class", "version").attr("font-size", 32).style("text-anchor", "middle").text(`v${version4}`); }, "draw"); renderer = { draw: draw6 }; } }); // src/diagrams/info/infoDiagram.ts var infoDiagram_exports = {}; __export(infoDiagram_exports, { diagram: () => diagram6 }); var diagram6; var init_infoDiagram = __esm({ "src/diagrams/info/infoDiagram.ts"() { "use strict"; init_infoParser(); init_infoDb(); init_infoRenderer(); diagram6 = { parser: parser7, db: db2, renderer }; } }); // src/diagrams/pie/pieDb.ts var DEFAULT_PIE_CONFIG, DEFAULT_PIE_DB, sections2, showData, config3, getConfig4, clear12, 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; config3 = structuredClone(DEFAULT_PIE_CONFIG); getConfig4 = /* @__PURE__ */ __name(() => structuredClone(config3), "getConfig"); clear12 = /* @__PURE__ */ __name(() => { sections2 = /* @__PURE__ */ new Map(); showData = DEFAULT_PIE_DB.showData; clear(); }, "clear"); addSection2 = /* @__PURE__ */ __name(({ label, value: value2 }) => { 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: clear12, setDiagramTitle, getDiagramTitle, setAccTitle, getAccTitle, setAccDescription, getAccDescription, addSection: addSection2, getSections: getSections2, setShowData, getShowData }; } }); // src/diagrams/pie/pieParser.ts var populateDb, parser8; 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, db9) => { populateCommonDb(ast, db9); db9.setShowData(ast.showData); ast.sections.map(db9.addSection); }, "populateDb"); parser8 = { parse: /* @__PURE__ */ __name(async (input) => { const ast = await parse2("pie", input); log.debug(ast); populateDb(ast, db3); }, "parse") }; } }); // src/diagrams/pie/pieStyles.ts var getStyles7, pieStyles_default; var init_pieStyles = __esm({ "src/diagrams/pie/pieStyles.ts"() { "use strict"; getStyles7 = /* @__PURE__ */ __name((options3) => ` .pieCircle{ stroke: ${options3.pieStrokeColor}; stroke-width : ${options3.pieStrokeWidth}; opacity : ${options3.pieOpacity}; } .pieOuterCircle{ stroke: ${options3.pieOuterStrokeColor}; stroke-width: ${options3.pieOuterStrokeWidth}; fill: none; } .pieTitleText { text-anchor: middle; font-size: ${options3.pieTitleTextSize}; fill: ${options3.pieTitleTextColor}; font-family: ${options3.fontFamily}; } .slice { font-family: ${options3.fontFamily}; fill: ${options3.pieSectionTextColor}; font-size:${options3.pieSectionTextSize}; // fill: white; } .legend text { fill: ${options3.pieLegendTextColor}; font-family: ${options3.fontFamily}; font-size: ${options3.pieLegendTextSize}; } `, "getStyles"); pieStyles_default = getStyles7; } }); // src/diagrams/pie/pieRenderer.ts var createPieArcs, draw7, renderer2; 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 pieData = [...sections6.entries()].map((element3) => { return { label: element3[0], value: element3[1] }; }).sort((a2, b2) => { return b2.value - a2.value; }); const pie2 = pie_default().value( (d3Section) => d3Section.value ); return pie2(pieData); }, "createPieArcs"); draw7 = /* @__PURE__ */ __name((text3, id28, _version, diagObj) => { log.debug("rendering pie chart\n" + text3); const db9 = diagObj.db; const globalConfig = getConfig2(); const pieConfig = cleanAndMerge(db9.getConfig(), globalConfig.pie); const MARGIN = 40; const LEGEND_RECT_SIZE = 18; const LEGEND_SPACING = 4; const height2 = 450; const pieWidth = height2; const svg = selectSvgElement(id28); const group2 = svg.append("g"); group2.attr("transform", "translate(" + pieWidth / 2 + "," + height2 / 2 + ")"); const { themeVariables } = globalConfig; let [outerStrokeWidth] = parseFontSize(themeVariables.pieOuterStrokeWidth); outerStrokeWidth ??= 2; const textPosition = pieConfig.textPosition; const radius2 = Math.min(pieWidth, height2) / 2 - MARGIN; const arcGenerator = arc_default().innerRadius(0).outerRadius(radius2); const labelArcGenerator = arc_default().innerRadius(radius2 * textPosition).outerRadius(radius2 * textPosition); group2.append("circle").attr("cx", 0).attr("cy", 0).attr("r", radius2 + outerStrokeWidth / 2).attr("class", "pieOuterCircle"); const sections6 = db9.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 ]; const color2 = ordinal(myGeneratedColors); group2.selectAll("mySlices").data(arcs).enter().append("path").attr("d", arcGenerator).attr("fill", (datum2) => { return color2(datum2.data.label); }).attr("class", "pieCircle"); let sum2 = 0; sections6.forEach((section) => { sum2 += section; }); group2.selectAll("mySlices").data(arcs).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"); group2.append("text").text(db9.getDiagramTitle()).attr("x", 0).attr("y", -(height2 - 50) / 2).attr("class", "pieTitleText"); const legend = group2.selectAll(".legend").data(color2.domain()).enter().append("g").attr("class", "legend").attr("transform", (_datum, index) => { const height3 = LEGEND_RECT_SIZE + LEGEND_SPACING; const offset = height3 * color2.domain().length / 2; const horizontal = 12 * LEGEND_RECT_SIZE; const vertical = index * height3 - offset; return "translate(" + horizontal + "," + vertical + ")"; }); legend.append("rect").attr("width", LEGEND_RECT_SIZE).attr("height", LEGEND_RECT_SIZE).style("fill", color2).style("stroke", color2); legend.data(arcs).append("text").attr("x", LEGEND_RECT_SIZE + LEGEND_SPACING).attr("y", LEGEND_RECT_SIZE - LEGEND_SPACING).text((datum2) => { const { label, value: value2 } = datum2.data; if (db9.getShowData()) { return `${label} [${value2}]`; } return label; }); const longestTextWidth = Math.max( ...legend.selectAll("text").nodes().map((node2) => node2?.getBoundingClientRect().width ?? 0) ); const totalWidth = pieWidth + MARGIN + LEGEND_RECT_SIZE + LEGEND_SPACING + longestTextWidth; svg.attr("viewBox", `0 0 ${totalWidth} ${height2}`); configureSvgSize(svg, height2, totalWidth, pieConfig.useMaxWidth); }, "draw"); renderer2 = { draw: draw7 }; } }); // src/diagrams/pie/pieDiagram.ts var pieDiagram_exports = {}; __export(pieDiagram_exports, { diagram: () => diagram7 }); var diagram7; var init_pieDiagram = __esm({ "src/diagrams/pie/pieDiagram.ts"() { "use strict"; init_pieParser(); init_pieDb(); init_pieStyles(); init_pieRenderer(); diagram7 = { parser: parser8, db: db3, renderer: renderer2, styles: pieStyles_default }; } }); // src/diagrams/quadrant-chart/parser/quadrant.jison var parser9, quadrant_default; var init_quadrant = __esm({ "src/diagrams/quadrant-chart/parser/quadrant.jison"() { "use strict"; parser9 = function() { var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l2) { for (o3 = o3 || {}, l2 = k2.length; l2--; o3[k2[l2]] = 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, 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, 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, 14], $Vg = [1, 23], $Vh = [1, 18], $Vi = [1, 19], $Vj = [1, 20], $Vk = [1, 21], $Vl = [1, 22], $Vm = [1, 24], $Vn = [1, 25], $Vo = [1, 26], $Vp = [1, 27], $Vq = [1, 28], $Vr = [1, 29], $Vs = [1, 32], $Vt = [1, 33], $Vu = [1, 34], $Vv = [1, 39], $Vw = [1, 40], $Vx = [1, 42], $Vy = [1, 44], $Vz = [1, 62], $VA = [1, 61], $VB = [4, 5, 8, 10, 12, 13, 14, 18, 44, 47, 49, 55, 56, 57, 63, 64, 65, 66, 67], $VC = [1, 65], $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 = [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 18], $VP = [1, 90], $VQ = [1, 91], $VR = [1, 92], $VS = [1, 99], $VT = [1, 93], $VU = [1, 96], $VV = [1, 94], $VW = [1, 95], $VX = [1, 97], $VY = [1, 98], $VZ = [1, 102], $V_ = [10, 55, 56, 57], $V$ = [4, 5, 6, 8, 10, 11, 13, 17, 18, 19, 20, 55, 56, 57]; var parser23 = { 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], [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, 18: $Vf, 25: $Vg, 35: $Vh, 37: $Vi, 39: $Vj, 41: $Vk, 42: $Vl, 48: $Vm, 50: $Vn, 51: $Vo, 52: $Vp, 53: $Vq, 54: $Vr, 60: $Vs, 61: $Vt, 63: $Vu, 64: $Vv, 65: $Vw, 66: $Vx, 67: $Vy }), o2($V5, [2, 34]), { 27: 45, 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: 46, 4: $V9, 5: $Va, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 18: $Vf, 25: $Vg, 35: $Vh, 37: $Vi, 39: $Vj, 41: $Vk, 42: $Vl, 48: $Vm, 50: $Vn, 51: $Vo, 52: $Vp, 53: $Vq, 54: $Vr, 60: $Vs, 61: $Vt, 63: $Vu, 64: $Vv, 65: $Vw, 66: $Vx, 67: $Vy }), o2($V7, [2, 39]), o2($V7, [2, 40]), o2($V7, [2, 41]), { 36: [1, 47] }, { 38: [1, 48] }, { 40: [1, 49] }, o2($V7, [2, 45]), o2($V7, [2, 46]), { 18: [1, 50] }, { 4: $V9, 5: $Va, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 43: 51, 58: 31, 60: $Vs, 61: $Vt, 63: $Vu, 64: $Vv, 65: $Vw, 66: $Vx, 67: $Vy }, { 4: $V9, 5: $Va, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 43: 52, 58: 31, 60: $Vs, 61: $Vt, 63: $Vu, 64: $Vv, 65: $Vw, 66: $Vx, 67: $Vy }, { 4: $V9, 5: $Va, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 43: 53, 58: 31, 60: $Vs, 61: $Vt, 63: $Vu, 64: $Vv, 65: $Vw, 66: $Vx, 67: $Vy }, { 4: $V9, 5: $Va, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 43: 54, 58: 31, 60: $Vs, 61: $Vt, 63: $Vu, 64: $Vv, 65: $Vw, 66: $Vx, 67: $Vy }, { 4: $V9, 5: $Va, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 43: 55, 58: 31, 60: $Vs, 61: $Vt, 63: $Vu, 64: $Vv, 65: $Vw, 66: $Vx, 67: $Vy }, { 4: $V9, 5: $Va, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 43: 56, 58: 31, 60: $Vs, 61: $Vt, 63: $Vu, 64: $Vv, 65: $Vw, 66: $Vx, 67: $Vy }, { 4: $V9, 5: $Va, 8: $Vz, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 18: $VA, 44: [1, 57], 47: [1, 58], 58: 60, 59: 59, 63: $Vu, 64: $Vv, 65: $Vw, 66: $Vx, 67: $Vy }, o2($VB, [2, 64]), o2($VB, [2, 66]), o2($VB, [2, 67]), o2($VB, [2, 70]), o2($VB, [2, 71]), o2($VB, [2, 72]), o2($VB, [2, 73]), o2($VB, [2, 74]), o2($VB, [2, 75]), o2($VB, [2, 76]), o2($VB, [2, 77]), o2($VB, [2, 78]), o2($VB, [2, 79]), o2($VB, [2, 80]), o2($V5, [2, 35]), o2($V7, [2, 38]), o2($V7, [2, 42]), o2($V7, [2, 43]), o2($V7, [2, 44]), { 3: 64, 4: $VC, 5: $VD, 6: $VE, 7: $VF, 8: $VG, 9: $VH, 10: $VI, 11: $VJ, 12: $VK, 13: $VL, 14: $VM, 15: $VN, 21: 63 }, o2($V7, [2, 53], { 59: 59, 58: 60, 4: $V9, 5: $Va, 8: $Vz, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 18: $VA, 49: [1, 77], 63: $Vu, 64: $Vv, 65: $Vw, 66: $Vx, 67: $Vy }), o2($V7, [2, 56], { 59: 59, 58: 60, 4: $V9, 5: $Va, 8: $Vz, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 18: $VA, 49: [1, 78], 63: $Vu, 64: $Vv, 65: $Vw, 66: $Vx, 67: $Vy }), o2($V7, [2, 57], { 59: 59, 58: 60, 4: $V9, 5: $Va, 8: $Vz, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 18: $VA, 63: $Vu, 64: $Vv, 65: $Vw, 66: $Vx, 67: $Vy }), o2($V7, [2, 58], { 59: 59, 58: 60, 4: $V9, 5: $Va, 8: $Vz, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 18: $VA, 63: $Vu, 64: $Vv, 65: $Vw, 66: $Vx, 67: $Vy }), o2($V7, [2, 59], { 59: 59, 58: 60, 4: $V9, 5: $Va, 8: $Vz, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 18: $VA, 63: $Vu, 64: $Vv, 65: $Vw, 66: $Vx, 67: $Vy }), o2($V7, [2, 60], { 59: 59, 58: 60, 4: $V9, 5: $Va, 8: $Vz, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 18: $VA, 63: $Vu, 64: $Vv, 65: $Vw, 66: $Vx, 67: $Vy }), { 45: [1, 79] }, { 44: [1, 80] }, o2($VB, [2, 65]), o2($VB, [2, 81]), o2($VB, [2, 82]), o2($VB, [2, 83]), { 3: 82, 4: $VC, 5: $VD, 6: $VE, 7: $VF, 8: $VG, 9: $VH, 10: $VI, 11: $VJ, 12: $VK, 13: $VL, 14: $VM, 15: $VN, 18: [1, 81] }, o2($VO, [2, 23]), o2($VO, [2, 1]), o2($VO, [2, 2]), o2($VO, [2, 3]), o2($VO, [2, 4]), o2($VO, [2, 5]), o2($VO, [2, 6]), o2($VO, [2, 7]), o2($VO, [2, 8]), o2($VO, [2, 9]), o2($VO, [2, 10]), o2($VO, [2, 11]), o2($VO, [2, 12]), o2($V7, [2, 52], { 58: 31, 43: 83, 4: $V9, 5: $Va, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 60: $Vs, 61: $Vt, 63: $Vu, 64: $Vv, 65: $Vw, 66: $Vx, 67: $Vy }), o2($V7, [2, 55], { 58: 31, 43: 84, 4: $V9, 5: $Va, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 60: $Vs, 61: $Vt, 63: $Vu, 64: $Vv, 65: $Vw, 66: $Vx, 67: $Vy }), { 46: [1, 85] }, { 45: [1, 86] }, { 4: $VP, 5: $VQ, 6: $VR, 8: $VS, 11: $VT, 13: $VU, 16: 89, 17: $VV, 18: $VW, 19: $VX, 20: $VY, 22: 88, 23: 87 }, o2($VO, [2, 24]), o2($V7, [2, 51], { 59: 59, 58: 60, 4: $V9, 5: $Va, 8: $Vz, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 18: $VA, 63: $Vu, 64: $Vv, 65: $Vw, 66: $Vx, 67: $Vy }), o2($V7, [2, 54], { 59: 59, 58: 60, 4: $V9, 5: $Va, 8: $Vz, 10: $Vb, 12: $Vc, 13: $Vd, 14: $Ve, 18: $VA, 63: $Vu, 64: $Vv, 65: $Vw, 66: $Vx, 67: $Vy }), o2($V7, [2, 47], { 22: 88, 16: 89, 23: 100, 4: $VP, 5: $VQ, 6: $VR, 8: $VS, 11: $VT, 13: $VU, 17: $VV, 18: $VW, 19: $VX, 20: $VY }), { 46: [1, 101] }, o2($V7, [2, 29], { 10: $VZ }), o2($V_, [2, 27], { 16: 103, 4: $VP, 5: $VQ, 6: $VR, 8: $VS, 11: $VT, 13: $VU, 17: $VV, 18: $VW, 19: $VX, 20: $VY }), o2($V$, [2, 25]), o2($V$, [2, 13]), o2($V$, [2, 14]), o2($V$, [2, 15]), o2($V$, [2, 16]), o2($V$, [2, 17]), o2($V$, [2, 18]), o2($V$, [2, 19]), o2($V$, [2, 20]), o2($V$, [2, 21]), o2($V$, [2, 22]), o2($V7, [2, 49], { 10: $VZ }), o2($V7, [2, 48], { 22: 88, 16: 89, 23: 104, 4: $VP, 5: $VQ, 6: $VR, 8: $VS, 11: $VT, 13: $VU, 17: $VV, 18: $VW, 19: $VX, 20: $VY }), { 4: $VP, 5: $VQ, 6: $VR, 8: $VS, 11: $VT, 13: $VU, 16: 89, 17: $VV, 18: $VW, 19: $VX, 20: $VY, 22: 105 }, o2($V$, [2, 26]), o2($V7, [2, 50], { 10: $VZ }), o2($V_, [2, 28], { 16: 103, 4: $VP, 5: $VQ, 6: $VR, 8: $VS, 11: $VT, 13: $VU, 17: $VV, 18: $VW, 19: $VX, 20: $VY })], 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 parse8(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 lexer3 = 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]; } } lexer3.setInput(input, sharedState.yy); sharedState.yy.lexer = lexer3; sharedState.yy.parser = this; if (typeof lexer3.yylloc == "undefined") { lexer3.yylloc = {}; } var yyloc = lexer3.yylloc; lstack.push(yyloc); var ranges = lexer3.options && lexer3.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 lex2() { var token2; token2 = tstack.pop() || lexer3.lex() || EOF2; if (typeof token2 !== "number") { if (token2 instanceof Array) { tstack = token2; token2 = tstack.pop(); } token2 = self2.symbols_[token2] || token2; } return token2; } __name(lex2, "lex"); var symbol, preErrorSymbol, state5, action, a2, r2, yyval = {}, p3, len, newState2, expected; while (true) { state5 = stack[stack.length - 1]; if (this.defaultActions[state5]) { action = this.defaultActions[state5]; } else { if (symbol === null || typeof symbol == "undefined") { symbol = lex2(); } action = table[state5] && table[state5][symbol]; } if (typeof action === "undefined" || !action.length || !action[0]) { var errStr = ""; expected = []; for (p3 in table[state5]) { if (this.terminals_[p3] && p3 > TERROR) { expected.push("'" + this.terminals_[p3] + "'"); } } if (lexer3.showPosition) { errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer3.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: lexer3.match, token: this.terminals_[symbol] || symbol, line: lexer3.yylineno, loc: yyloc, expected }); } if (action[0] instanceof Array && action.length > 1) { throw new Error("Parse Error: multiple actions possible at state: " + state5 + ", token: " + symbol); } switch (action[0]) { case 1: stack.push(symbol); vstack.push(lexer3.yytext); lstack.push(lexer3.yylloc); stack.push(action[1]); symbol = null; if (!preErrorSymbol) { yyleng = lexer3.yyleng; yytext = lexer3.yytext; yylineno = lexer3.yylineno; yyloc = lexer3.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 lexer2 = /* @__PURE__ */ function() { var lexer3 = { 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(match2, 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 = match2[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 + match2[0].length }; this.yytext += match2[0]; this.match += match2[0]; this.matches = match2; 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(match2[0].length); this.matched += match2[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, match2, tempMatch, index; if (!this._more) { this.yytext = ""; this.match = ""; } var rules = this._currentRules(); for (var i2 = 0; i2 < rules.length; i2++) { tempMatch = this._input.match(this.rules[rules[i2]]); if (tempMatch && (!match2 || tempMatch[0].length > match2[0].length)) { match2 = tempMatch; index = i2; if (this.options.backtrack_lexer) { token2 = this.test_match(tempMatch, rules[i2]); if (token2 !== false) { return token2; } else if (this._backtrack) { match2 = false; continue; } else { return false; } } else if (!this.options.flex) { break; } } } if (match2) { token2 = this.test_match(match2, rules[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 lex2() { 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 11; break; case 37: return 64; break; case 38: return 10; break; case 39: return 65; break; case 40: return 65; break; case 41: return 14; break; case 42: return 13; break; case 43: return 67; break; case 44: return 66; break; case 45: return 12; break; case 46: return 8; break; case 47: return 5; break; case 48: return 18; break; case 49: return 56; break; case 50: return 63; break; case 51: 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, /^(?::)/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], "inclusive": true } } }; return lexer3; }(); parser23.lexer = lexer2; function Parser3() { this.yy = {}; } __name(Parser3, "Parser"); Parser3.prototype = parser23; parser23.Parser = Parser3; return new Parser3(); }(); parser9.parser = parser9; quadrant_default = parser9; } }); // 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(data5) { this.data = { ...this.data, ...data5 }; } addPoints(points) { this.data.points = [...points, ...this.data.points]; } addClass(className, styles3) { this.classes.set(className, styles3); } setConfig(config6) { log.trace("setConfig called with: ", config6); this.config = { ...this.config, ...config6 }; } 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_utils5 = __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(text3) { return sanitizeText(text3.trim(), config4); } 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(styles3) { const stylesObject = {}; for (const style3 of styles3) { 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, y5, styles3) { const stylesObject = parseStyles(styles3); quadrantBuilder.addPoints([ { x: x5, y: y5, text: textSanitizer(textObj.text), className, ...stylesObject } ]); } function addClass2(className, styles3) { quadrantBuilder.addClass(className, parseStyles(styles3)); } function setWidth(width3) { quadrantBuilder.setConfig({ chartWidth: width3 }); } function setHeight(height2) { quadrantBuilder.setConfig({ chartHeight: height2 }); } function getQuadrantData() { const config6 = getConfig2(); const { themeVariables, quadrantChart: quadrantChartConfig } = config6; 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 config4, quadrantBuilder, clear13, quadrantDb_default; var init_quadrantDb = __esm({ "src/diagrams/quadrant-chart/quadrantDb.ts"() { "use strict"; init_diagramAPI(); init_common(); init_commonDb(); init_quadrantBuilder(); init_utils5(); config4 = getConfig2(); __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"); clear13 = /* @__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: clear13, 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, id28, _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(data5) { return `translate(${data5.x}, ${data5.y}) rotate(${data5.rotation || 0})`; } __name(getTransformation, "getTransformation"); const conf7 = getConfig2(); log.debug("Rendering quadrant chart\n" + txt); const securityLevel = conf7.securityLevel; let sandboxElement; if (securityLevel === "sandbox") { sandboxElement = select_default2("#i" + id28); } const root4 = securityLevel === "sandbox" ? select_default2(sandboxElement.nodes()[0].contentDocument.body) : select_default2("body"); const svg = root4.select(`[id="${id28}"]`); const group2 = svg.append("g").attr("class", "main"); const width3 = conf7.quadrantChart?.chartWidth ?? 500; const height2 = conf7.quadrantChart?.chartHeight ?? 500; configureSvgSize(svg, height2, width3, conf7.quadrantChart?.useMaxWidth ?? true); svg.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", (data5) => data5.x1).attr("y1", (data5) => data5.y1).attr("x2", (data5) => data5.x2).attr("y2", (data5) => data5.y2).style("stroke", (data5) => data5.strokeFill).style("stroke-width", (data5) => data5.strokeWidth); } const quadrants = quadrantsGroup.selectAll("g.quadrant").data(quadrantData.quadrants).enter().append("g").attr("class", "quadrant"); quadrants.append("rect").attr("x", (data5) => data5.x).attr("y", (data5) => data5.y).attr("width", (data5) => data5.width).attr("height", (data5) => data5.height).attr("fill", (data5) => data5.fill); quadrants.append("text").attr("x", 0).attr("y", 0).attr("fill", (data5) => data5.text.fill).attr("font-size", (data5) => data5.text.fontSize).attr( "dominant-baseline", (data5) => getDominantBaseLine(data5.text.horizontalPos) ).attr("text-anchor", (data5) => getTextAnchor(data5.text.verticalPos)).attr("transform", (data5) => getTransformation(data5.text)).text((data5) => data5.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((data5) => data5.text).attr("fill", (data5) => data5.fill).attr("font-size", (data5) => data5.fontSize).attr("dominant-baseline", (data5) => getDominantBaseLine(data5.horizontalPos)).attr("text-anchor", (data5) => getTextAnchor(data5.verticalPos)).attr("transform", (data5) => getTransformation(data5)); const dataPoints = dataPointGroup.selectAll("g.data-point").data(quadrantData.points).enter().append("g").attr("class", "data-point"); dataPoints.append("circle").attr("cx", (data5) => data5.x).attr("cy", (data5) => data5.y).attr("r", (data5) => data5.radius).attr("fill", (data5) => data5.fill).attr("stroke", (data5) => data5.strokeColor).attr("stroke-width", (data5) => data5.strokeWidth); dataPoints.append("text").attr("x", 0).attr("y", 0).text((data5) => data5.text.text).attr("fill", (data5) => data5.text.fill).attr("font-size", (data5) => data5.text.fontSize).attr( "dominant-baseline", (data5) => getDominantBaseLine(data5.text.horizontalPos) ).attr("text-anchor", (data5) => getTextAnchor(data5.text.verticalPos)).attr("transform", (data5) => getTransformation(data5.text)); }, "draw"); quadrantRenderer_default = { draw: draw8 }; } }); // src/diagrams/quadrant-chart/quadrantDiagram.ts var quadrantDiagram_exports = {}; __export(quadrantDiagram_exports, { diagram: () => diagram8 }); var diagram8; var init_quadrantDiagram = __esm({ "src/diagrams/quadrant-chart/quadrantDiagram.ts"() { "use strict"; init_quadrant(); init_quadrantDb(); init_quadrantRenderer(); diagram8 = { parser: quadrant_default, db: quadrantDb_default, renderer: quadrantRenderer_default, styles: /* @__PURE__ */ __name(() => "", "styles") }; } }); // src/diagrams/xychart/parser/xychart.jison var parser10, xychart_default; var init_xychart = __esm({ "src/diagrams/xychart/parser/xychart.jison"() { "use strict"; parser10 = function() { var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l2) { for (o3 = o3 || {}, l2 = k2.length; l2--; o3[k2[l2]] = 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, 34, 35, 36], $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, 34, 35, 36], $Vo = [1, 10, 12, 14, 16, 18, 19, 21, 23, 24, 26, 27, 28, 34, 35, 36], $Vp = [1, 10, 12, 14, 16, 18, 19, 21, 23, 24, 26, 27, 28, 34, 35, 36, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50], $Vq = [1, 64]; var parser23 = { 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, "commaSeparatedNumbers": 25, "SQUARE_BRACES_END": 26, "NUMBER_WITH_DECIMAL": 27, "COMMA": 28, "xAxisData": 29, "bandData": 30, "ARROW_DELIMITER": 31, "commaSeparatedTexts": 32, "yAxisData": 33, "NEWLINE": 34, "SEMI": 35, "EOF": 36, "alphaNum": 37, "STR": 38, "MD_STR": 39, "alphaNumToken": 40, "AMP": 41, "NUM": 42, "ALPHA": 43, "PLUS": 44, "EQUALS": 45, "MULT": 46, "DOT": 47, "BRKT": 48, "MINUS": 49, "UNDERSCORE": 50, "$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", 27: "NUMBER_WITH_DECIMAL", 28: "COMMA", 31: "ARROW_DELIMITER", 34: "NEWLINE", 35: "SEMI", 36: "EOF", 38: "STR", 39: "MD_STR", 41: "AMP", 42: "NUM", 43: "ALPHA", 44: "PLUS", 45: "EQUALS", 46: "MULT", 47: "DOT", 48: "BRKT", 49: "MINUS", 50: "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], [13, 1], [13, 2], [13, 1], [29, 1], [29, 3], [30, 3], [32, 3], [32, 1], [15, 1], [15, 2], [15, 1], [33, 3], [4, 1], [4, 1], [4, 1], [11, 1], [11, 1], [11, 1], [37, 1], [37, 2], [40, 1], [40, 1], [40, 1], [40, 1], [40, 1], [40, 1], [40, 1], [40, 1], [40, 1], [40, 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: this.$ = [Number($$[$0 - 2]), ...$$[$0]]; break; case 21: this.$ = [Number($$[$0])]; break; case 22: yy.setXAxisTitle($$[$0]); break; case 23: yy.setXAxisTitle($$[$0 - 1]); break; case 24: yy.setXAxisTitle({ type: "text", text: "" }); break; case 25: yy.setXAxisBand($$[$0]); break; case 26: yy.setXAxisRangeData(Number($$[$0 - 2]), Number($$[$0])); break; case 27: this.$ = $$[$0 - 1]; break; case 28: this.$ = [$$[$0 - 2], ...$$[$0]]; break; case 29: this.$ = [$$[$0]]; break; case 30: yy.setYAxisTitle($$[$0]); break; case 31: yy.setYAxisTitle($$[$0 - 1]); break; case 32: yy.setYAxisTitle({ type: "text", text: "" }); break; case 33: yy.setYAxisRangeData(Number($$[$0 - 2]), Number($$[$0])); break; case 37: this.$ = { text: $$[$0], type: "text" }; break; case 38: this.$ = { text: $$[$0], type: "text" }; break; case 39: this.$ = { text: $$[$0], type: "markdown" }; break; case 40: this.$ = $$[$0]; break; case 41: this.$ = $$[$0 - 1] + "" + $$[$0]; break; } }, "anonymous"), table: [o2($V0, $V1, { 3: 1, 4: 2, 7: 4, 5: $V2, 34: $V3, 35: $V4, 36: $V5 }), { 1: [3] }, o2($V0, $V1, { 4: 2, 7: 4, 3: 8, 5: $V2, 34: $V3, 35: $V4, 36: $V5 }), o2($V0, $V1, { 4: 2, 7: 4, 6: 9, 3: 10, 5: $V2, 8: [1, 11], 34: $V3, 35: $V4, 36: $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, 34]), o2($V6, [2, 35]), o2($V6, [2, 36]), { 1: [2, 1] }, o2($V0, $V1, { 4: 2, 7: 4, 3: 21, 5: $V2, 34: $V3, 35: $V4, 36: $V5 }), { 1: [2, 3] }, o2($V6, [2, 5]), o2($V0, [2, 7], { 4: 22, 34: $V3, 35: $V4, 36: $V5 }), { 11: 23, 37: 24, 38: $V7, 39: $V8, 40: 27, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi }, { 11: 39, 13: 38, 24: $Vj, 27: $Vk, 29: 40, 30: 41, 37: 24, 38: $V7, 39: $V8, 40: 27, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi }, { 11: 45, 15: 44, 27: $Vl, 33: 46, 37: 24, 38: $V7, 39: $V8, 40: 27, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi }, { 11: 49, 17: 48, 24: $Vm, 37: 24, 38: $V7, 39: $V8, 40: 27, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi }, { 11: 52, 17: 51, 24: $Vm, 37: 24, 38: $V7, 39: $V8, 40: 27, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $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, 37], { 40: 55, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi }), o2($Vo, [2, 38]), o2($Vo, [2, 39]), o2($Vp, [2, 40]), o2($Vp, [2, 42]), o2($Vp, [2, 43]), 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($Vn, [2, 10]), o2($Vn, [2, 22], { 30: 41, 29: 56, 24: $Vj, 27: $Vk }), o2($Vn, [2, 24]), o2($Vn, [2, 25]), { 31: [1, 57] }, { 11: 59, 32: 58, 37: 24, 38: $V7, 39: $V8, 40: 27, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi }, o2($Vn, [2, 11]), o2($Vn, [2, 30], { 33: 60, 27: $Vl }), o2($Vn, [2, 32]), { 31: [1, 61] }, o2($Vn, [2, 12]), { 17: 62, 24: $Vm }, { 25: 63, 27: $Vq }, o2($Vn, [2, 14]), { 17: 65, 24: $Vm }, o2($Vn, [2, 16]), o2($Vn, [2, 17]), o2($Vp, [2, 41]), o2($Vn, [2, 23]), { 27: [1, 66] }, { 26: [1, 67] }, { 26: [2, 29], 28: [1, 68] }, o2($Vn, [2, 31]), { 27: [1, 69] }, o2($Vn, [2, 13]), { 26: [1, 70] }, { 26: [2, 21], 28: [1, 71] }, o2($Vn, [2, 15]), o2($Vn, [2, 26]), o2($Vn, [2, 27]), { 11: 59, 32: 72, 37: 24, 38: $V7, 39: $V8, 40: 27, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 46: $Ve, 47: $Vf, 48: $Vg, 49: $Vh, 50: $Vi }, o2($Vn, [2, 33]), o2($Vn, [2, 19]), { 25: 73, 27: $Vq }, { 26: [2, 28] }, { 26: [2, 20] }], defaultActions: { 8: [2, 1], 10: [2, 3], 21: [2, 2], 72: [2, 28], 73: [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 parse8(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 lexer3 = 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]; } } lexer3.setInput(input, sharedState.yy); sharedState.yy.lexer = lexer3; sharedState.yy.parser = this; if (typeof lexer3.yylloc == "undefined") { lexer3.yylloc = {}; } var yyloc = lexer3.yylloc; lstack.push(yyloc); var ranges = lexer3.options && lexer3.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 lex2() { var token2; token2 = tstack.pop() || lexer3.lex() || EOF2; if (typeof token2 !== "number") { if (token2 instanceof Array) { tstack = token2; token2 = tstack.pop(); } token2 = self2.symbols_[token2] || token2; } return token2; } __name(lex2, "lex"); var symbol, preErrorSymbol, state5, action, a2, r2, yyval = {}, p3, len, newState2, expected; while (true) { state5 = stack[stack.length - 1]; if (this.defaultActions[state5]) { action = this.defaultActions[state5]; } else { if (symbol === null || typeof symbol == "undefined") { symbol = lex2(); } action = table[state5] && table[state5][symbol]; } if (typeof action === "undefined" || !action.length || !action[0]) { var errStr = ""; expected = []; for (p3 in table[state5]) { if (this.terminals_[p3] && p3 > TERROR) { expected.push("'" + this.terminals_[p3] + "'"); } } if (lexer3.showPosition) { errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer3.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: lexer3.match, token: this.terminals_[symbol] || symbol, line: lexer3.yylineno, loc: yyloc, expected }); } if (action[0] instanceof Array && action.length > 1) { throw new Error("Parse Error: multiple actions possible at state: " + state5 + ", token: " + symbol); } switch (action[0]) { case 1: stack.push(symbol); vstack.push(lexer3.yytext); lstack.push(lexer3.yylloc); stack.push(action[1]); symbol = null; if (!preErrorSymbol) { yyleng = lexer3.yyleng; yytext = lexer3.yytext; yylineno = lexer3.yylineno; yyloc = lexer3.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 lexer2 = /* @__PURE__ */ function() { var lexer3 = { 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(match2, 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 = match2[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 + match2[0].length }; this.yytext += match2[0]; this.match += match2[0]; this.matches = match2; 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(match2[0].length); this.matched += match2[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, match2, tempMatch, index; if (!this._more) { this.yytext = ""; this.match = ""; } var rules = this._currentRules(); for (var i2 = 0; i2 < rules.length; i2++) { tempMatch = this._input.match(this.rules[rules[i2]]); if (tempMatch && (!match2 || tempMatch[0].length > match2[0].length)) { match2 = tempMatch; index = i2; if (this.options.backtrack_lexer) { token2 = this.test_match(tempMatch, rules[i2]); if (token2 !== false) { return token2; } else if (this._backtrack) { match2 = false; continue; } else { return false; } } else if (!this.options.flex) { break; } } } if (match2) { token2 = this.test_match(match2, rules[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 lex2() { 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 34; break; case 3: this.popState(); return 34; break; case 4: return 34; 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 8; break; case 16: this.pushState("axis_data"); return "X_AXIS"; break; case 17: this.pushState("axis_data"); return "Y_AXIS"; break; case 18: this.pushState("axis_band_data"); return 24; break; case 19: return 31; break; case 20: this.pushState("data"); return 16; break; case 21: this.pushState("data"); return 18; break; case 22: this.pushState("data_inner"); return 24; break; case 23: return 27; break; case 24: this.popState(); return 26; break; case 25: this.popState(); break; case 26: this.pushState("string"); break; case 27: this.popState(); break; case 28: return "STR"; break; case 29: return 24; break; case 30: return 26; break; case 31: return 43; break; case 32: return "COLON"; break; case 33: return 44; break; case 34: return 28; break; case 35: return 45; break; case 36: return 46; break; case 37: return 48; break; case 38: return 50; break; case 39: return 47; break; case 40: return 41; break; case 41: return 49; break; case 42: return 42; break; case 43: break; case 44: return 35; break; case 45: return 36; 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, /^(?:(?: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\(\?:\(\?!`"\)\.\)\+ \{ return MD_STR; \}\n\(\?:`))/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, 20, 21, 23, 24, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45], "inclusive": true }, "data": { "rules": [0, 1, 3, 4, 5, 6, 7, 9, 11, 14, 15, 16, 17, 20, 21, 22, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45], "inclusive": true }, "axis_band_data": { "rules": [0, 1, 4, 5, 6, 7, 9, 11, 14, 15, 16, 17, 20, 21, 24, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45], "inclusive": true }, "axis_data": { "rules": [0, 1, 2, 4, 5, 6, 7, 9, 11, 14, 15, 16, 17, 18, 19, 20, 21, 23, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45], "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": [27, 28], "inclusive": false }, "INITIAL": { "rules": [0, 1, 4, 5, 6, 7, 9, 11, 14, 15, 16, 17, 20, 21, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45], "inclusive": true } } }; return lexer3; }(); parser23.lexer = lexer2; function Parser3() { this.yy = {}; } __name(Parser3, "Parser"); Parser3.prototype = parser23; parser23.Parser = Parser3; return new Parser3(); }(); parser10.parser = parser10; xychart_default = parser10; } }); // src/diagrams/xychart/chartBuilder/interfaces.ts function isBarPlot(data5) { return data5.type === "bar"; } function isBandAxisData(data5) { return data5.type === "band"; } function isLinearAxisData(data5) { return data5.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.range = [0, 10]; this.boundingRect = { x: 0, y: 0, width: 0, height: 0 }; this.axisPosition = "left"; } 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); const heightRequired = spaceRequired.height + 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; } 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 y5 = this.boundingRect.y + this.axisConfig.axisLineWidth / 2; drawableElement.push({ type: "path", groupTexts: ["bottom-axis", "axis-line"], data: [ { path: `M ${this.boundingRect.x},${y5} L ${this.boundingRect.x + this.boundingRect.width},${y5}`, 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), y: this.boundingRect.y + this.axisConfig.labelPadding + (this.showTick ? this.axisConfig.tickLength : 0) + (this.showAxisLine ? this.axisConfig.axisLineWidth : 0), fill: this.axisThemeConfig.labelColor, fontSize: this.axisConfig.labelFontSize, rotation: 0, verticalPos: "top", horizontalPos: "center" })) }); } if (this.showTick) { const y5 = 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)},${y5} L ${this.getScaleValue(tick)},${y5 + 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 y5 = 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},${y5} L ${this.boundingRect.x + this.boundingRect.width},${y5}`, 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 y5 = this.boundingRect.y; drawableElement.push({ type: "path", groupTexts: ["top-axis", "ticks"], data: this.getTickValues().map((tick) => ({ path: `M ${this.getScaleValue(tick)},${y5 + this.boundingRect.height - (this.showAxisLine ? this.axisConfig.axisLineWidth : 0)} L ${this.getScaleValue(tick)},${y5 + 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(data5, axisConfig, axisThemeConfig, tmpSVGGroup2) { const textDimensionCalculator = new TextDimensionCalculatorWithFont(tmpSVGGroup2); if (isBandAxisData(data5)) { return new BandAxis( axisConfig, axisThemeConfig, data5.categories, data5.title, textDimensionCalculator ); } return new LinearAxis( axisConfig, axisThemeConfig, [data5.min, data5.max], data5.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((d2) => [ this.xAxis.getScaleValue(d2[0]), this.yAxis.getScaleValue(d2[1]) ]); let path4; if (this.orientation === "horizontal") { path4 = line_default().y((d2) => d2[0]).x((d2) => d2[1])(finalData); } else { path4 = line_default().x((d2) => d2[0]).y((d2) => d2[1])(finalData); } if (!path4) { return []; } return [ { groupTexts: ["plot", `line-plot-${this.plotIndex}`], type: "path", data: [ { path: path4, strokeFill: this.plotData.strokeFill, strokeWidth: this.plotData.strokeWidth } ] } ]; } }; } }); // 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((d2) => [ this.xAxis.getScaleValue(d2[0]), this.yAxis.getScaleValue(d2[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((data5) => ({ x: this.boundingRect.x, y: data5[0] - barWidthHalf, height: barWidth, width: data5[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((data5) => ({ x: data5[0] - barWidthHalf, y: data5[1], width: barWidth, height: this.boundingRect.y + this.boundingRect.height - data5[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(config6, chartData, chartThemeConfig, tmpSVGGroup2) { const orchestrator = new Orchestrator(config6, chartData, chartThemeConfig, tmpSVGGroup2); return orchestrator.getDrawableElement(); } }; } }); // src/diagrams/xychart/xychartDb.ts function getChartDefaultThemeConfig() { const defaultThemeVariables2 = getThemeVariables3(); const config6 = getConfig(); return cleanAndMerge(defaultThemeVariables2.xyChart, config6.themeVariables.xyChart); } function getChartDefaultConfig() { const config6 = getConfig(); return cleanAndMerge( defaultConfig_default.xyChart, config6.xyChart ); } function getChartDefaultData() { return { yAxis: { type: "linear", title: "", min: Infinity, max: -Infinity }, xAxis: { type: "band", title: "", categories: [] }, title: "", plots: [] }; } function textSanitizer2(text3) { const config6 = getConfig(); return sanitizeText(text3.trim(), config6); } 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(min9, max10) { xyChartData.xAxis = { type: "linear", title: xyChartData.xAxis.title, min: min9, 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(min9, max10) { xyChartData.yAxis = { type: "linear", title: xyChartData.yAxis.title, min: min9, max: max10 }; hasSetYAxis = true; } function setYAxisRangeFromPlotData(data5) { const minValue = Math.min(...data5); const maxValue = Math.max(...data5); 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(data5) { let retData = []; if (data5.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, data5.length)); } if (!hasSetYAxis) { setYAxisRangeFromPlotData(data5); } if (isBandAxisData(xyChartData.xAxis)) { retData = xyChartData.xAxis.categories.map((c3, i2) => [c3, data5[i2]]); } if (isLinearAxisData(xyChartData.xAxis)) { const min9 = xyChartData.xAxis.min; const max10 = xyChartData.xAxis.max; const step3 = (max10 - min9) / (data5.length - 1); const categories = []; for (let i2 = min9; i2 <= max10; i2 += step3) { categories.push(`${i2}`); } retData = categories.map((c3, i2) => [c3, data5[i2]]); } return retData; } function getPlotColorFromPalette(plotIndex2) { return plotColorPalette[plotIndex2 === 0 ? 0 : plotIndex2 % plotColorPalette.length]; } function setLineData(title2, data5) { const plotData = transformDataWithoutCategory(data5); xyChartData.plots.push({ type: "line", strokeFill: getPlotColorFromPalette(plotIndex), strokeWidth: 2, data: plotData }); plotIndex++; } function setBarData(title2, data5) { const plotData = transformDataWithoutCategory(data5); 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; } var plotIndex, tmpSVGGroup, xyChartConfig, xyChartThemeConfig, xyChartData, plotColorPalette, hasSetXAxis, hasSetYAxis, clear14, 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"); clear14 = /* @__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: clear14, setAccTitle, getAccTitle, setDiagramTitle, getDiagramTitle, getAccDescription, setAccDescription, setOrientation, setXAxisTitle, setXAxisRangeData, setXAxisBand, setYAxisTitle, setYAxisRangeData, setLineData, setBarData, setTmpSVGG, getChartThemeConfig, getChartConfig }; } }); // 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, id28, _version, diagObj) => { const db9 = diagObj.db; const themeConfig = db9.getChartThemeConfig(); const chartConfig = db9.getChartConfig(); 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(data5) { return `translate(${data5.x}, ${data5.y}) rotate(${data5.rotation || 0})`; } __name(getTextTransformation, "getTextTransformation"); log.debug("Rendering xychart chart\n" + txt); const svg = selectSvgElement(id28); const group2 = svg.append("g").attr("class", "main"); const background = group2.append("rect").attr("width", chartConfig.width).attr("height", chartConfig.height).attr("class", "background"); configureSvgSize(svg, chartConfig.height, chartConfig.width, true); svg.attr("viewBox", `0 0 ${chartConfig.width} ${chartConfig.height}`); background.attr("fill", themeConfig.backgroundColor); db9.setTmpSVGG(svg.append("g").attr("class", "mermaid-tmp-group")); const shapes4 = db9.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", (data5) => data5.x).attr("y", (data5) => data5.y).attr("width", (data5) => data5.width).attr("height", (data5) => data5.height).attr("fill", (data5) => data5.fill).attr("stroke", (data5) => data5.strokeFill).attr("stroke-width", (data5) => data5.strokeWidth); break; case "text": shapeGroup.selectAll("text").data(shape.data).enter().append("text").attr("x", 0).attr("y", 0).attr("fill", (data5) => data5.fill).attr("font-size", (data5) => data5.fontSize).attr("dominant-baseline", (data5) => getDominantBaseLine(data5.verticalPos)).attr("text-anchor", (data5) => getTextAnchor(data5.horizontalPos)).attr("transform", (data5) => getTextTransformation(data5)).text((data5) => data5.text); break; case "path": shapeGroup.selectAll("path").data(shape.data).enter().append("path").attr("d", (data5) => data5.path).attr("fill", (data5) => data5.fill ? data5.fill : "none").attr("stroke", (data5) => data5.strokeFill).attr("stroke-width", (data5) => data5.strokeWidth); break; } } }, "draw"); xychartRenderer_default = { draw: draw9 }; } }); // src/diagrams/xychart/xychartDiagram.ts var xychartDiagram_exports = {}; __export(xychartDiagram_exports, { diagram: () => diagram9 }); var diagram9; var init_xychartDiagram = __esm({ "src/diagrams/xychart/xychartDiagram.ts"() { "use strict"; init_xychart(); init_xychartDb(); init_xychartRenderer(); diagram9 = { parser: xychart_default, db: xychartDb_default, renderer: xychartRenderer_default }; } }); // src/diagrams/requirement/parser/requirementDiagram.jison var parser11, requirementDiagram_default; var init_requirementDiagram = __esm({ "src/diagrams/requirement/parser/requirementDiagram.jison"() { "use strict"; parser11 = function() { var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l2) { for (o3 = o3 || {}, l2 = k2.length; l2--; o3[k2[l2]] = v3) ; return o3; }, "o"), $V0 = [1, 3], $V1 = [1, 4], $V2 = [1, 5], $V3 = [1, 6], $V4 = [5, 6, 8, 9, 11, 13, 31, 32, 33, 34, 35, 36, 44, 62, 63], $V5 = [1, 18], $V6 = [2, 7], $V7 = [1, 22], $V8 = [1, 23], $V9 = [1, 24], $Va = [1, 25], $Vb = [1, 26], $Vc = [1, 27], $Vd = [1, 20], $Ve = [1, 28], $Vf = [1, 29], $Vg = [62, 63], $Vh = [5, 8, 9, 11, 13, 31, 32, 33, 34, 35, 36, 44, 51, 53, 62, 63], $Vi = [1, 47], $Vj = [1, 48], $Vk = [1, 49], $Vl = [1, 50], $Vm = [1, 51], $Vn = [1, 52], $Vo = [1, 53], $Vp = [53, 54], $Vq = [1, 64], $Vr = [1, 60], $Vs = [1, 61], $Vt = [1, 62], $Vu = [1, 63], $Vv = [1, 65], $Vw = [1, 69], $Vx = [1, 70], $Vy = [1, 67], $Vz = [1, 68], $VA = [5, 8, 9, 11, 13, 31, 32, 33, 34, 35, 36, 44, 62, 63]; var parser23 = { 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, "requirementType": 17, "requirementName": 18, "STRUCT_START": 19, "requirementBody": 20, "ID": 21, "COLONSEP": 22, "id": 23, "TEXT": 24, "text": 25, "RISK": 26, "riskLevel": 27, "VERIFYMTHD": 28, "verifyType": 29, "STRUCT_STOP": 30, "REQUIREMENT": 31, "FUNCTIONAL_REQUIREMENT": 32, "INTERFACE_REQUIREMENT": 33, "PERFORMANCE_REQUIREMENT": 34, "PHYSICAL_REQUIREMENT": 35, "DESIGN_CONSTRAINT": 36, "LOW_RISK": 37, "MED_RISK": 38, "HIGH_RISK": 39, "VERIFY_ANALYSIS": 40, "VERIFY_DEMONSTRATION": 41, "VERIFY_INSPECTION": 42, "VERIFY_TEST": 43, "ELEMENT": 44, "elementName": 45, "elementBody": 46, "TYPE": 47, "type": 48, "DOCREF": 49, "ref": 50, "END_ARROW_L": 51, "relationship": 52, "LINE": 53, "END_ARROW_R": 54, "CONTAINS": 55, "COPIES": 56, "DERIVES": 57, "SATISFIES": 58, "VERIFIES": 59, "REFINES": 60, "TRACES": 61, "unqString": 62, "qString": 63, "$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", 19: "STRUCT_START", 21: "ID", 22: "COLONSEP", 24: "TEXT", 26: "RISK", 28: "VERIFYMTHD", 30: "STRUCT_STOP", 31: "REQUIREMENT", 32: "FUNCTIONAL_REQUIREMENT", 33: "INTERFACE_REQUIREMENT", 34: "PERFORMANCE_REQUIREMENT", 35: "PHYSICAL_REQUIREMENT", 36: "DESIGN_CONSTRAINT", 37: "LOW_RISK", 38: "MED_RISK", 39: "HIGH_RISK", 40: "VERIFY_ANALYSIS", 41: "VERIFY_DEMONSTRATION", 42: "VERIFY_INSPECTION", 43: "VERIFY_TEST", 44: "ELEMENT", 47: "TYPE", 49: "DOCREF", 51: "END_ARROW_L", 53: "LINE", 54: "END_ARROW_R", 55: "CONTAINS", 56: "COPIES", 57: "DERIVES", 58: "SATISFIES", 59: "VERIFIES", 60: "REFINES", 61: "TRACES", 62: "unqString", 63: "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], [14, 5], [20, 5], [20, 5], [20, 5], [20, 5], [20, 2], [20, 1], [17, 1], [17, 1], [17, 1], [17, 1], [17, 1], [17, 1], [27, 1], [27, 1], [27, 1], [29, 1], [29, 1], [29, 1], [29, 1], [15, 5], [46, 5], [46, 5], [46, 2], [46, 1], [16, 5], [16, 5], [52, 1], [52, 1], [52, 1], [52, 1], [52, 1], [52, 1], [52, 1], [18, 1], [18, 1], [23, 1], [23, 1], [25, 1], [25, 1], [45, 1], [45, 1], [48, 1], [48, 1], [50, 1], [50, 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 13: yy.addRequirement($$[$0 - 3], $$[$0 - 4]); break; case 14: yy.setNewReqId($$[$0 - 2]); break; case 15: yy.setNewReqText($$[$0 - 2]); break; case 16: yy.setNewReqRisk($$[$0 - 2]); break; case 17: yy.setNewReqVerifyMethod($$[$0 - 2]); break; case 20: this.$ = yy.RequirementType.REQUIREMENT; break; case 21: this.$ = yy.RequirementType.FUNCTIONAL_REQUIREMENT; break; case 22: this.$ = yy.RequirementType.INTERFACE_REQUIREMENT; break; case 23: this.$ = yy.RequirementType.PERFORMANCE_REQUIREMENT; break; case 24: this.$ = yy.RequirementType.PHYSICAL_REQUIREMENT; break; case 25: this.$ = yy.RequirementType.DESIGN_CONSTRAINT; break; case 26: this.$ = yy.RiskLevel.LOW_RISK; break; case 27: this.$ = yy.RiskLevel.MED_RISK; break; case 28: this.$ = yy.RiskLevel.HIGH_RISK; break; case 29: this.$ = yy.VerifyType.VERIFY_ANALYSIS; break; case 30: this.$ = yy.VerifyType.VERIFY_DEMONSTRATION; break; case 31: this.$ = yy.VerifyType.VERIFY_INSPECTION; break; case 32: this.$ = yy.VerifyType.VERIFY_TEST; break; case 33: yy.addElement($$[$0 - 3]); break; case 34: yy.setNewElementType($$[$0 - 2]); break; case 35: yy.setNewElementDocRef($$[$0 - 2]); break; case 38: yy.addRelationship($$[$0 - 2], $$[$0], $$[$0 - 4]); break; case 39: yy.addRelationship($$[$0 - 2], $$[$0 - 4], $$[$0]); break; case 40: this.$ = yy.Relationships.CONTAINS; break; case 41: this.$ = yy.Relationships.COPIES; break; case 42: this.$ = yy.Relationships.DERIVES; break; case 43: this.$ = yy.Relationships.SATISFIES; break; case 44: this.$ = yy.Relationships.VERIFIES; break; case 45: this.$ = yy.Relationships.REFINES; break; case 46: this.$ = yy.Relationships.TRACES; 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: 19, 23: 21, 31: $V7, 32: $V8, 33: $V9, 34: $Va, 35: $Vb, 36: $Vc, 44: $Vd, 62: $Ve, 63: $Vf }, o2($V4, [2, 4]), o2($V4, [2, 5]), { 1: [2, 1] }, { 8: [1, 30] }, { 4: 17, 5: $V5, 7: 31, 8: $V6, 9: $V1, 11: $V2, 13: $V3, 14: 14, 15: 15, 16: 16, 17: 19, 23: 21, 31: $V7, 32: $V8, 33: $V9, 34: $Va, 35: $Vb, 36: $Vc, 44: $Vd, 62: $Ve, 63: $Vf }, { 4: 17, 5: $V5, 7: 32, 8: $V6, 9: $V1, 11: $V2, 13: $V3, 14: 14, 15: 15, 16: 16, 17: 19, 23: 21, 31: $V7, 32: $V8, 33: $V9, 34: $Va, 35: $Vb, 36: $Vc, 44: $Vd, 62: $Ve, 63: $Vf }, { 4: 17, 5: $V5, 7: 33, 8: $V6, 9: $V1, 11: $V2, 13: $V3, 14: 14, 15: 15, 16: 16, 17: 19, 23: 21, 31: $V7, 32: $V8, 33: $V9, 34: $Va, 35: $Vb, 36: $Vc, 44: $Vd, 62: $Ve, 63: $Vf }, { 4: 17, 5: $V5, 7: 34, 8: $V6, 9: $V1, 11: $V2, 13: $V3, 14: 14, 15: 15, 16: 16, 17: 19, 23: 21, 31: $V7, 32: $V8, 33: $V9, 34: $Va, 35: $Vb, 36: $Vc, 44: $Vd, 62: $Ve, 63: $Vf }, { 4: 17, 5: $V5, 7: 35, 8: $V6, 9: $V1, 11: $V2, 13: $V3, 14: 14, 15: 15, 16: 16, 17: 19, 23: 21, 31: $V7, 32: $V8, 33: $V9, 34: $Va, 35: $Vb, 36: $Vc, 44: $Vd, 62: $Ve, 63: $Vf }, { 18: 36, 62: [1, 37], 63: [1, 38] }, { 45: 39, 62: [1, 40], 63: [1, 41] }, { 51: [1, 42], 53: [1, 43] }, o2($Vg, [2, 20]), o2($Vg, [2, 21]), o2($Vg, [2, 22]), o2($Vg, [2, 23]), o2($Vg, [2, 24]), o2($Vg, [2, 25]), o2($Vh, [2, 49]), o2($Vh, [2, 50]), { 1: [2, 3] }, { 8: [2, 8] }, { 8: [2, 9] }, { 8: [2, 10] }, { 8: [2, 11] }, { 8: [2, 12] }, { 19: [1, 44] }, { 19: [2, 47] }, { 19: [2, 48] }, { 19: [1, 45] }, { 19: [2, 53] }, { 19: [2, 54] }, { 52: 46, 55: $Vi, 56: $Vj, 57: $Vk, 58: $Vl, 59: $Vm, 60: $Vn, 61: $Vo }, { 52: 54, 55: $Vi, 56: $Vj, 57: $Vk, 58: $Vl, 59: $Vm, 60: $Vn, 61: $Vo }, { 5: [1, 55] }, { 5: [1, 56] }, { 53: [1, 57] }, o2($Vp, [2, 40]), o2($Vp, [2, 41]), o2($Vp, [2, 42]), o2($Vp, [2, 43]), o2($Vp, [2, 44]), o2($Vp, [2, 45]), o2($Vp, [2, 46]), { 54: [1, 58] }, { 5: $Vq, 20: 59, 21: $Vr, 24: $Vs, 26: $Vt, 28: $Vu, 30: $Vv }, { 5: $Vw, 30: $Vx, 46: 66, 47: $Vy, 49: $Vz }, { 23: 71, 62: $Ve, 63: $Vf }, { 23: 72, 62: $Ve, 63: $Vf }, o2($VA, [2, 13]), { 22: [1, 73] }, { 22: [1, 74] }, { 22: [1, 75] }, { 22: [1, 76] }, { 5: $Vq, 20: 77, 21: $Vr, 24: $Vs, 26: $Vt, 28: $Vu, 30: $Vv }, o2($VA, [2, 19]), o2($VA, [2, 33]), { 22: [1, 78] }, { 22: [1, 79] }, { 5: $Vw, 30: $Vx, 46: 80, 47: $Vy, 49: $Vz }, o2($VA, [2, 37]), o2($VA, [2, 38]), o2($VA, [2, 39]), { 23: 81, 62: $Ve, 63: $Vf }, { 25: 82, 62: [1, 83], 63: [1, 84] }, { 27: 85, 37: [1, 86], 38: [1, 87], 39: [1, 88] }, { 29: 89, 40: [1, 90], 41: [1, 91], 42: [1, 92], 43: [1, 93] }, o2($VA, [2, 18]), { 48: 94, 62: [1, 95], 63: [1, 96] }, { 50: 97, 62: [1, 98], 63: [1, 99] }, o2($VA, [2, 36]), { 5: [1, 100] }, { 5: [1, 101] }, { 5: [2, 51] }, { 5: [2, 52] }, { 5: [1, 102] }, { 5: [2, 26] }, { 5: [2, 27] }, { 5: [2, 28] }, { 5: [1, 103] }, { 5: [2, 29] }, { 5: [2, 30] }, { 5: [2, 31] }, { 5: [2, 32] }, { 5: [1, 104] }, { 5: [2, 55] }, { 5: [2, 56] }, { 5: [1, 105] }, { 5: [2, 57] }, { 5: [2, 58] }, { 5: $Vq, 20: 106, 21: $Vr, 24: $Vs, 26: $Vt, 28: $Vu, 30: $Vv }, { 5: $Vq, 20: 107, 21: $Vr, 24: $Vs, 26: $Vt, 28: $Vu, 30: $Vv }, { 5: $Vq, 20: 108, 21: $Vr, 24: $Vs, 26: $Vt, 28: $Vu, 30: $Vv }, { 5: $Vq, 20: 109, 21: $Vr, 24: $Vs, 26: $Vt, 28: $Vu, 30: $Vv }, { 5: $Vw, 30: $Vx, 46: 110, 47: $Vy, 49: $Vz }, { 5: $Vw, 30: $Vx, 46: 111, 47: $Vy, 49: $Vz }, o2($VA, [2, 14]), o2($VA, [2, 15]), o2($VA, [2, 16]), o2($VA, [2, 17]), o2($VA, [2, 34]), o2($VA, [2, 35])], defaultActions: { 8: [2, 2], 12: [2, 1], 30: [2, 3], 31: [2, 8], 32: [2, 9], 33: [2, 10], 34: [2, 11], 35: [2, 12], 37: [2, 47], 38: [2, 48], 40: [2, 53], 41: [2, 54], 83: [2, 51], 84: [2, 52], 86: [2, 26], 87: [2, 27], 88: [2, 28], 90: [2, 29], 91: [2, 30], 92: [2, 31], 93: [2, 32], 95: [2, 55], 96: [2, 56], 98: [2, 57], 99: [2, 58] }, 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 parse8(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 lexer3 = 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]; } } lexer3.setInput(input, sharedState.yy); sharedState.yy.lexer = lexer3; sharedState.yy.parser = this; if (typeof lexer3.yylloc == "undefined") { lexer3.yylloc = {}; } var yyloc = lexer3.yylloc; lstack.push(yyloc); var ranges = lexer3.options && lexer3.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 lex2() { var token2; token2 = tstack.pop() || lexer3.lex() || EOF2; if (typeof token2 !== "number") { if (token2 instanceof Array) { tstack = token2; token2 = tstack.pop(); } token2 = self2.symbols_[token2] || token2; } return token2; } __name(lex2, "lex"); var symbol, preErrorSymbol, state5, action, a2, r2, yyval = {}, p3, len, newState2, expected; while (true) { state5 = stack[stack.length - 1]; if (this.defaultActions[state5]) { action = this.defaultActions[state5]; } else { if (symbol === null || typeof symbol == "undefined") { symbol = lex2(); } action = table[state5] && table[state5][symbol]; } if (typeof action === "undefined" || !action.length || !action[0]) { var errStr = ""; expected = []; for (p3 in table[state5]) { if (this.terminals_[p3] && p3 > TERROR) { expected.push("'" + this.terminals_[p3] + "'"); } } if (lexer3.showPosition) { errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer3.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: lexer3.match, token: this.terminals_[symbol] || symbol, line: lexer3.yylineno, loc: yyloc, expected }); } if (action[0] instanceof Array && action.length > 1) { throw new Error("Parse Error: multiple actions possible at state: " + state5 + ", token: " + symbol); } switch (action[0]) { case 1: stack.push(symbol); vstack.push(lexer3.yytext); lstack.push(lexer3.yylloc); stack.push(action[1]); symbol = null; if (!preErrorSymbol) { yyleng = lexer3.yyleng; yytext = lexer3.yytext; yylineno = lexer3.yylineno; yyloc = lexer3.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 lexer2 = /* @__PURE__ */ function() { var lexer3 = { 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(match2, 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 = match2[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 + match2[0].length }; this.yytext += match2[0]; this.match += match2[0]; this.matches = match2; 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(match2[0].length); this.matched += match2[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, match2, tempMatch, index; if (!this._more) { this.yytext = ""; this.match = ""; } var rules = this._currentRules(); for (var i2 = 0; i2 < rules.length; i2++) { tempMatch = this._input.match(this.rules[rules[i2]]); if (tempMatch && (!match2 || tempMatch[0].length > match2[0].length)) { match2 = tempMatch; index = i2; if (this.options.backtrack_lexer) { token2 = this.test_match(tempMatch, rules[i2]); if (token2 !== false) { return token2; } else if (this._backtrack) { match2 = false; continue; } else { return false; } } else if (!this.options.flex) { break; } } } if (match2) { token2 = this.test_match(match2, rules[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 lex2() { 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 5; break; case 9: break; case 10: break; case 11: break; case 12: return 8; break; case 13: return 6; break; case 14: return 19; break; case 15: return 30; break; case 16: return 22; break; case 17: return 21; break; case 18: return 24; break; case 19: return 26; break; case 20: return 28; break; case 21: return 31; break; case 22: return 32; break; case 23: return 33; break; case 24: return 34; break; case 25: return 35; break; case 26: return 36; break; case 27: return 37; break; case 28: return 38; break; case 29: return 39; break; case 30: return 40; break; case 31: return 41; break; case 32: return 42; break; case 33: return 43; break; case 34: return 44; break; case 35: return 55; break; case 36: return 56; break; case 37: return 57; break; case 38: return 58; break; case 39: return 59; break; case 40: return 60; break; case 41: return 61; break; case 42: return 47; break; case 43: return 49; break; case 44: return 51; break; case 45: return 54; break; case 46: return 53; break; case 47: this.begin("string"); break; case 48: this.popState(); break; case 49: return "qString"; break; case 50: yy_.yytext = yy_.yytext.trim(); return 62; 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, /^(?:(\r?\n)+)/i, /^(?:\s+)/i, /^(?:#[^\n]*)/i, /^(?:%[^\n]*)/i, /^(?:$)/i, /^(?:requirementDiagram\b)/i, /^(?:\{)/i, /^(?:\})/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, /^(?:<-)/i, /^(?:->)/i, /^(?:-)/i, /^(?:["])/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:[\w][^\r\n\{\<\>\-\=]*)/i], conditions: { "acc_descr_multiline": { "rules": [6, 7], "inclusive": false }, "acc_descr": { "rules": [4], "inclusive": false }, "acc_title": { "rules": [2], "inclusive": false }, "unqString": { "rules": [], "inclusive": false }, "token": { "rules": [], "inclusive": false }, "string": { "rules": [48, 49], "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, 50], "inclusive": true } } }; return lexer3; }(); parser23.lexer = lexer2; function Parser3() { this.yy = {}; } __name(Parser3, "Parser"); Parser3.prototype = parser23; parser23.Parser = Parser3; return new Parser3(); }(); parser11.parser = parser11; requirementDiagram_default = parser11; } }); // src/diagrams/requirement/requirementDb.js var relations, latestRequirement, requirements, latestElement, elements, RequirementType, RiskLevel, VerifyType, Relationships, addRequirement, getRequirements, setNewReqId, setNewReqText, setNewReqRisk, setNewReqVerifyMethod, addElement, getElements, setNewElementType, setNewElementDocRef, addRelationship2, getRelationships2, clear15, requirementDb_default; var init_requirementDb = __esm({ "src/diagrams/requirement/requirementDb.js"() { "use strict"; init_diagramAPI(); init_logger(); init_commonDb(); relations = []; latestRequirement = {}; requirements = /* @__PURE__ */ new Map(); latestElement = {}; elements = /* @__PURE__ */ new Map(); RequirementType = { REQUIREMENT: "Requirement", FUNCTIONAL_REQUIREMENT: "Functional Requirement", INTERFACE_REQUIREMENT: "Interface Requirement", PERFORMANCE_REQUIREMENT: "Performance Requirement", PHYSICAL_REQUIREMENT: "Physical Requirement", DESIGN_CONSTRAINT: "Design Constraint" }; RiskLevel = { LOW_RISK: "Low", MED_RISK: "Medium", HIGH_RISK: "High" }; VerifyType = { VERIFY_ANALYSIS: "Analysis", VERIFY_DEMONSTRATION: "Demonstration", VERIFY_INSPECTION: "Inspection", VERIFY_TEST: "Test" }; Relationships = { CONTAINS: "contains", COPIES: "copies", DERIVES: "derives", SATISFIES: "satisfies", VERIFIES: "verifies", REFINES: "refines", TRACES: "traces" }; addRequirement = /* @__PURE__ */ __name((name, type3) => { if (!requirements.has(name)) { requirements.set(name, { name, type: type3, id: latestRequirement.id, text: latestRequirement.text, risk: latestRequirement.risk, verifyMethod: latestRequirement.verifyMethod }); } latestRequirement = {}; return requirements.get(name); }, "addRequirement"); getRequirements = /* @__PURE__ */ __name(() => requirements, "getRequirements"); setNewReqId = /* @__PURE__ */ __name((id28) => { if (latestRequirement !== void 0) { latestRequirement.id = id28; } }, "setNewReqId"); setNewReqText = /* @__PURE__ */ __name((text3) => { if (latestRequirement !== void 0) { latestRequirement.text = text3; } }, "setNewReqText"); setNewReqRisk = /* @__PURE__ */ __name((risk) => { if (latestRequirement !== void 0) { latestRequirement.risk = risk; } }, "setNewReqRisk"); setNewReqVerifyMethod = /* @__PURE__ */ __name((verifyMethod) => { if (latestRequirement !== void 0) { latestRequirement.verifyMethod = verifyMethod; } }, "setNewReqVerifyMethod"); addElement = /* @__PURE__ */ __name((name) => { if (!elements.has(name)) { elements.set(name, { name, type: latestElement.type, docRef: latestElement.docRef }); log.info("Added new requirement: ", name); } latestElement = {}; return elements.get(name); }, "addElement"); getElements = /* @__PURE__ */ __name(() => elements, "getElements"); setNewElementType = /* @__PURE__ */ __name((type3) => { if (latestElement !== void 0) { latestElement.type = type3; } }, "setNewElementType"); setNewElementDocRef = /* @__PURE__ */ __name((docRef) => { if (latestElement !== void 0) { latestElement.docRef = docRef; } }, "setNewElementDocRef"); addRelationship2 = /* @__PURE__ */ __name((type3, src, dst) => { relations.push({ type: type3, src, dst }); }, "addRelationship"); getRelationships2 = /* @__PURE__ */ __name(() => relations, "getRelationships"); clear15 = /* @__PURE__ */ __name(() => { relations = []; latestRequirement = {}; requirements = /* @__PURE__ */ new Map(); latestElement = {}; elements = /* @__PURE__ */ new Map(); clear(); }, "clear"); requirementDb_default = { RequirementType, RiskLevel, VerifyType, Relationships, getConfig: /* @__PURE__ */ __name(() => getConfig2().req, "getConfig"), addRequirement, getRequirements, setNewReqId, setNewReqText, setNewReqRisk, setNewReqVerifyMethod, setAccTitle, getAccTitle, setAccDescription, getAccDescription, addElement, getElements, setNewElementType, setNewElementDocRef, addRelationship: addRelationship2, getRelationships: getRelationships2, clear: clear15 }; } }); // src/diagrams/requirement/styles.js var getStyles8, styles_default7; var init_styles7 = __esm({ "src/diagrams/requirement/styles.js"() { "use strict"; getStyles8 = /* @__PURE__ */ __name((options3) => ` marker { fill: ${options3.relationColor}; stroke: ${options3.relationColor}; } marker.cross { stroke: ${options3.lineColor}; } svg { font-family: ${options3.fontFamily}; font-size: ${options3.fontSize}; } .reqBox { fill: ${options3.requirementBackground}; fill-opacity: 1.0; stroke: ${options3.requirementBorderColor}; stroke-width: ${options3.requirementBorderSize}; } .reqTitle, .reqLabel{ fill: ${options3.requirementTextColor}; } .reqLabelBox { fill: ${options3.relationLabelBackground}; fill-opacity: 1.0; } .req-title-line { stroke: ${options3.requirementBorderColor}; stroke-width: ${options3.requirementBorderSize}; } .relationshipLine { stroke: ${options3.relationColor}; stroke-width: 1; } .relationshipLabel { fill: ${options3.relationLabelColor}; } `, "getStyles"); styles_default7 = getStyles8; } }); // src/diagrams/requirement/requirementMarkers.js var ReqMarkers, insertLineEndings, requirementMarkers_default; var init_requirementMarkers = __esm({ "src/diagrams/requirement/requirementMarkers.js"() { "use strict"; ReqMarkers = { CONTAINS: "contains", ARROW: "arrow" }; insertLineEndings = /* @__PURE__ */ __name((parentNode, conf7) => { let containsNode = parentNode.append("defs").append("marker").attr("id", ReqMarkers.CONTAINS + "_line_ending").attr("refX", 0).attr("refY", conf7.line_height / 2).attr("markerWidth", conf7.line_height).attr("markerHeight", conf7.line_height).attr("orient", "auto").append("g"); containsNode.append("circle").attr("cx", conf7.line_height / 2).attr("cy", conf7.line_height / 2).attr("r", conf7.line_height / 2).attr("fill", "none"); containsNode.append("line").attr("x1", 0).attr("x2", conf7.line_height).attr("y1", conf7.line_height / 2).attr("y2", conf7.line_height / 2).attr("stroke-width", 1); containsNode.append("line").attr("y1", 0).attr("y2", conf7.line_height).attr("x1", conf7.line_height / 2).attr("x2", conf7.line_height / 2).attr("stroke-width", 1); parentNode.append("defs").append("marker").attr("id", ReqMarkers.ARROW + "_line_ending").attr("refX", conf7.line_height).attr("refY", 0.5 * conf7.line_height).attr("markerWidth", conf7.line_height).attr("markerHeight", conf7.line_height).attr("orient", "auto").append("path").attr( "d", `M0,0 L${conf7.line_height},${conf7.line_height / 2} M${conf7.line_height},${conf7.line_height / 2} L0,${conf7.line_height}` ).attr("stroke-width", 1); }, "insertLineEndings"); requirementMarkers_default = { ReqMarkers, insertLineEndings }; } }); // src/diagrams/requirement/requirementRenderer.js var conf3, relCnt2, newRectNode, newTitleNode, newBodyNode, addEdgeLabel, drawRelationshipFromLayout2, drawReqs, drawElements, addRelationships2, adjustEntities2, elementString, draw10, requirementRenderer_default; var init_requirementRenderer = __esm({ "src/diagrams/requirement/requirementRenderer.js"() { "use strict"; init_src32(); init_dagre(); init_graphlib(); init_diagramAPI(); init_logger(); init_setupGraphViewbox(); init_common(); init_requirementMarkers(); conf3 = {}; relCnt2 = 0; newRectNode = /* @__PURE__ */ __name((parentNode, id28) => { return parentNode.insert("rect", "#" + id28).attr("class", "req reqBox").attr("x", 0).attr("y", 0).attr("width", conf3.rect_min_width + "px").attr("height", conf3.rect_min_height + "px"); }, "newRectNode"); newTitleNode = /* @__PURE__ */ __name((parentNode, id28, txts) => { let x5 = conf3.rect_min_width / 2; let title2 = parentNode.append("text").attr("class", "req reqLabel reqTitle").attr("id", id28).attr("x", x5).attr("y", conf3.rect_padding).attr("dominant-baseline", "hanging"); let i2 = 0; txts.forEach((textStr) => { if (i2 == 0) { title2.append("tspan").attr("text-anchor", "middle").attr("x", conf3.rect_min_width / 2).attr("dy", 0).text(textStr); } else { title2.append("tspan").attr("text-anchor", "middle").attr("x", conf3.rect_min_width / 2).attr("dy", conf3.line_height * 0.75).text(textStr); } i2++; }); let yPadding = 1.5 * conf3.rect_padding; let linePadding = i2 * conf3.line_height * 0.75; let totalY = yPadding + linePadding; parentNode.append("line").attr("class", "req-title-line").attr("x1", "0").attr("x2", conf3.rect_min_width).attr("y1", totalY).attr("y2", totalY); return { titleNode: title2, y: totalY }; }, "newTitleNode"); newBodyNode = /* @__PURE__ */ __name((parentNode, id28, txts, yStart) => { let body = parentNode.append("text").attr("class", "req reqLabel").attr("id", id28).attr("x", conf3.rect_padding).attr("y", yStart).attr("dominant-baseline", "hanging"); let currentRow = 0; const charLimit = 30; let wrappedTxts = []; txts.forEach((textStr) => { let currentTextLen = textStr.length; while (currentTextLen > charLimit && currentRow < 3) { let firstPart = textStr.substring(0, charLimit); textStr = textStr.substring(charLimit, textStr.length); currentTextLen = textStr.length; wrappedTxts[wrappedTxts.length] = firstPart; currentRow++; } if (currentRow == 3) { let lastStr = wrappedTxts[wrappedTxts.length - 1]; wrappedTxts[wrappedTxts.length - 1] = lastStr.substring(0, lastStr.length - 4) + "..."; } else { wrappedTxts[wrappedTxts.length] = textStr; } currentRow = 0; }); wrappedTxts.forEach((textStr) => { body.append("tspan").attr("x", conf3.rect_padding).attr("dy", conf3.line_height).text(textStr); }); return body; }, "newBodyNode"); addEdgeLabel = /* @__PURE__ */ __name((parentNode, svgPath, conf7, txt) => { const len = svgPath.node().getTotalLength(); const labelPoint = svgPath.node().getPointAtLength(len * 0.5); const labelId = "rel" + relCnt2; relCnt2++; const labelNode = parentNode.append("text").attr("class", "req relationshipLabel").attr("id", labelId).attr("x", labelPoint.x).attr("y", labelPoint.y).attr("text-anchor", "middle").attr("dominant-baseline", "middle").text(txt); const labelBBox = labelNode.node().getBBox(); parentNode.insert("rect", "#" + labelId).attr("class", "req reqLabelBox").attr("x", labelPoint.x - labelBBox.width / 2).attr("y", labelPoint.y - labelBBox.height / 2).attr("width", labelBBox.width).attr("height", labelBBox.height).attr("fill", "white").attr("fill-opacity", "85%"); }, "addEdgeLabel"); drawRelationshipFromLayout2 = /* @__PURE__ */ __name(function(svg, rel2, g2, insert, diagObj) { const edge = g2.edge(elementString(rel2.src), elementString(rel2.dst)); const lineFunction = line_default().x(function(d2) { return d2.x; }).y(function(d2) { return d2.y; }); const svgPath = svg.insert("path", "#" + insert).attr("class", "er relationshipLine").attr("d", lineFunction(edge.points)).attr("fill", "none"); if (rel2.type == diagObj.db.Relationships.CONTAINS) { svgPath.attr( "marker-start", "url(" + common_default.getUrl(conf3.arrowMarkerAbsolute) + "#" + rel2.type + "_line_ending)" ); } else { svgPath.attr("stroke-dasharray", "10,7"); svgPath.attr( "marker-end", "url(" + common_default.getUrl(conf3.arrowMarkerAbsolute) + "#" + requirementMarkers_default.ReqMarkers.ARROW + "_line_ending)" ); } addEdgeLabel(svg, svgPath, conf3, `<<${rel2.type}>>`); return; }, "drawRelationshipFromLayout"); drawReqs = /* @__PURE__ */ __name((reqs, graph, svgNode2) => { reqs.forEach((req, reqName) => { reqName = elementString(reqName); log.info("Added new requirement: ", reqName); const groupNode = svgNode2.append("g").attr("id", reqName); const textId = "req-" + reqName; const rectNode = newRectNode(groupNode, textId); let nodes7 = []; let titleNodeInfo = newTitleNode(groupNode, reqName + "_title", [ `<<${req.type}>>`, `${req.name}` ]); nodes7.push(titleNodeInfo.titleNode); let bodyNode = newBodyNode( groupNode, reqName + "_body", [ `Id: ${req.id}`, `Text: ${req.text}`, `Risk: ${req.risk}`, `Verification: ${req.verifyMethod}` ], titleNodeInfo.y ); nodes7.push(bodyNode); const rectBBox = rectNode.node().getBBox(); graph.setNode(reqName, { width: rectBBox.width, height: rectBBox.height, shape: "rect", id: reqName }); }); }, "drawReqs"); drawElements = /* @__PURE__ */ __name((els, graph, svgNode2) => { els.forEach((el, elName) => { const id28 = elementString(elName); const groupNode = svgNode2.append("g").attr("id", id28); const textId = "element-" + id28; const rectNode = newRectNode(groupNode, textId); let nodes7 = []; let titleNodeInfo = newTitleNode(groupNode, textId + "_title", [`<>`, `${elName}`]); nodes7.push(titleNodeInfo.titleNode); let bodyNode = newBodyNode( groupNode, textId + "_body", [`Type: ${el.type || "Not Specified"}`, `Doc Ref: ${el.docRef || "None"}`], titleNodeInfo.y ); nodes7.push(bodyNode); const rectBBox = rectNode.node().getBBox(); graph.setNode(id28, { width: rectBBox.width, height: rectBBox.height, shape: "rect", id: id28 }); }); }, "drawElements"); addRelationships2 = /* @__PURE__ */ __name((relationships2, g2) => { relationships2.forEach(function(r2) { let src = elementString(r2.src); let dst = elementString(r2.dst); g2.setEdge(src, dst, { relationship: r2 }); }); return relationships2; }, "addRelationships"); adjustEntities2 = /* @__PURE__ */ __name(function(svgNode2, graph) { graph.nodes().forEach(function(v3) { if (v3 !== void 0 && graph.node(v3) !== void 0) { svgNode2.select("#" + v3); svgNode2.select("#" + v3).attr( "transform", "translate(" + (graph.node(v3).x - graph.node(v3).width / 2) + "," + (graph.node(v3).y - graph.node(v3).height / 2) + " )" ); } }); return; }, "adjustEntities"); elementString = /* @__PURE__ */ __name((str2) => { return str2.replace(/\s/g, "").replace(/\./g, "_"); }, "elementString"); draw10 = /* @__PURE__ */ __name((text3, id28, _version, diagObj) => { conf3 = getConfig2().requirement; const securityLevel = conf3.securityLevel; let sandboxElement; if (securityLevel === "sandbox") { sandboxElement = select_default2("#i" + id28); } const root4 = securityLevel === "sandbox" ? select_default2(sandboxElement.nodes()[0].contentDocument.body) : select_default2("body"); const svg = root4.select(`[id='${id28}']`); requirementMarkers_default.insertLineEndings(svg, conf3); const g2 = new Graph({ multigraph: false, compound: false, directed: true }).setGraph({ rankdir: conf3.layoutDirection, marginx: 20, marginy: 20, nodesep: 100, edgesep: 100, ranksep: 100 }).setDefaultEdgeLabel(function() { return {}; }); let requirements2 = diagObj.db.getRequirements(); let elements4 = diagObj.db.getElements(); let relationships2 = diagObj.db.getRelationships(); drawReqs(requirements2, g2, svg); drawElements(elements4, g2, svg); addRelationships2(relationships2, g2); layout(g2); adjustEntities2(svg, g2); relationships2.forEach(function(rel2) { drawRelationshipFromLayout2(svg, rel2, g2, id28, diagObj); }); const padding2 = conf3.rect_padding; const svgBounds = svg.node().getBBox(); const width3 = svgBounds.width + padding2 * 2; const height2 = svgBounds.height + padding2 * 2; configureSvgSize(svg, height2, width3, conf3.useMaxWidth); svg.attr("viewBox", `${svgBounds.x - padding2} ${svgBounds.y - padding2} ${width3} ${height2}`); }, "draw"); requirementRenderer_default = { draw: draw10 }; } }); // src/diagrams/requirement/requirementDiagram.ts var requirementDiagram_exports = {}; __export(requirementDiagram_exports, { diagram: () => diagram10 }); var diagram10; var init_requirementDiagram2 = __esm({ "src/diagrams/requirement/requirementDiagram.ts"() { "use strict"; init_requirementDiagram(); init_requirementDb(); init_styles7(); init_requirementRenderer(); diagram10 = { parser: requirementDiagram_default, db: requirementDb_default, renderer: requirementRenderer_default, styles: styles_default7 }; } }); // src/diagrams/sequence/parser/sequenceDiagram.jison var parser12, sequenceDiagram_default; var init_sequenceDiagram = __esm({ "src/diagrams/sequence/parser/sequenceDiagram.jison"() { "use strict"; parser12 = function() { var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l2) { for (o3 = o3 || {}, l2 = k2.length; l2--; o3[k2[l2]] = v3) ; return o3; }, "o"), $V0 = [1, 2], $V1 = [1, 3], $V2 = [1, 4], $V3 = [2, 4], $V4 = [1, 9], $V5 = [1, 11], $V6 = [1, 13], $V7 = [1, 14], $V8 = [1, 16], $V9 = [1, 17], $Va = [1, 18], $Vb = [1, 24], $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, 41], $Vs = [1, 42], $Vt = [1, 43], $Vu = [1, 44], $Vv = [1, 45], $Vw = [1, 46], $Vx = [1, 4, 5, 13, 14, 16, 18, 21, 23, 29, 30, 31, 33, 35, 36, 37, 38, 39, 41, 43, 44, 46, 47, 48, 49, 50, 52, 53, 54, 59, 60, 61, 62, 70], $Vy = [4, 5, 16, 50, 52, 53], $Vz = [4, 5, 13, 14, 16, 18, 21, 23, 29, 30, 31, 33, 35, 36, 37, 38, 39, 41, 43, 44, 46, 50, 52, 53, 54, 59, 60, 61, 62, 70], $VA = [4, 5, 13, 14, 16, 18, 21, 23, 29, 30, 31, 33, 35, 36, 37, 38, 39, 41, 43, 44, 46, 49, 50, 52, 53, 54, 59, 60, 61, 62, 70], $VB = [4, 5, 13, 14, 16, 18, 21, 23, 29, 30, 31, 33, 35, 36, 37, 38, 39, 41, 43, 44, 46, 48, 50, 52, 53, 54, 59, 60, 61, 62, 70], $VC = [4, 5, 13, 14, 16, 18, 21, 23, 29, 30, 31, 33, 35, 36, 37, 38, 39, 41, 43, 44, 46, 47, 50, 52, 53, 54, 59, 60, 61, 62, 70], $VD = [68, 69, 70], $VE = [1, 122]; var parser23 = { trace: /* @__PURE__ */ __name(function trace() { }, "trace"), yy: {}, symbols_: { "error": 2, "start": 3, "SPACE": 4, "NEWLINE": 5, "SD": 6, "document": 7, "line": 8, "statement": 9, "box_section": 10, "box_line": 11, "participant_statement": 12, "create": 13, "box": 14, "restOfLine": 15, "end": 16, "signal": 17, "autonumber": 18, "NUM": 19, "off": 20, "activate": 21, "actor": 22, "deactivate": 23, "note_statement": 24, "links_statement": 25, "link_statement": 26, "properties_statement": 27, "details_statement": 28, "title": 29, "legacy_title": 30, "acc_title": 31, "acc_title_value": 32, "acc_descr": 33, "acc_descr_value": 34, "acc_descr_multiline_value": 35, "loop": 36, "rect": 37, "opt": 38, "alt": 39, "else_sections": 40, "par": 41, "par_sections": 42, "par_over": 43, "critical": 44, "option_sections": 45, "break": 46, "option": 47, "and": 48, "else": 49, "participant": 50, "AS": 51, "participant_actor": 52, "destroy": 53, "note": 54, "placement": 55, "text2": 56, "over": 57, "actor_pair": 58, "links": 59, "link": 60, "properties": 61, "details": 62, "spaceList": 63, ",": 64, "left_of": 65, "right_of": 66, "signaltype": 67, "+": 68, "-": 69, "ACTOR": 70, "SOLID_OPEN_ARROW": 71, "DOTTED_OPEN_ARROW": 72, "SOLID_ARROW": 73, "BIDIRECTIONAL_SOLID_ARROW": 74, "DOTTED_ARROW": 75, "BIDIRECTIONAL_DOTTED_ARROW": 76, "SOLID_CROSS": 77, "DOTTED_CROSS": 78, "SOLID_POINT": 79, "DOTTED_POINT": 80, "TXT": 81, "$accept": 0, "$end": 1 }, terminals_: { 2: "error", 4: "SPACE", 5: "NEWLINE", 6: "SD", 13: "create", 14: "box", 15: "restOfLine", 16: "end", 18: "autonumber", 19: "NUM", 20: "off", 21: "activate", 23: "deactivate", 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", 41: "par", 43: "par_over", 44: "critical", 46: "break", 47: "option", 48: "and", 49: "else", 50: "participant", 51: "AS", 52: "participant_actor", 53: "destroy", 54: "note", 57: "over", 59: "links", 60: "link", 61: "properties", 62: "details", 64: ",", 65: "left_of", 66: "right_of", 68: "+", 69: "-", 70: "ACTOR", 71: "SOLID_OPEN_ARROW", 72: "DOTTED_OPEN_ARROW", 73: "SOLID_ARROW", 74: "BIDIRECTIONAL_SOLID_ARROW", 75: "DOTTED_ARROW", 76: "BIDIRECTIONAL_DOTTED_ARROW", 77: "SOLID_CROSS", 78: "DOTTED_CROSS", 79: "SOLID_POINT", 80: "DOTTED_POINT", 81: "TXT" }, productions_: [0, [3, 2], [3, 2], [3, 2], [7, 0], [7, 2], [8, 2], [8, 1], [8, 1], [10, 0], [10, 2], [11, 2], [11, 1], [11, 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], [45, 1], [45, 4], [42, 1], [42, 4], [40, 1], [40, 4], [12, 5], [12, 3], [12, 5], [12, 3], [12, 3], [24, 4], [24, 4], [25, 3], [26, 3], [27, 3], [28, 3], [63, 2], [63, 1], [58, 3], [58, 1], [55, 1], [55, 1], [17, 5], [17, 5], [17, 4], [22, 1], [67, 1], [67, 1], [67, 1], [67, 1], [67, 1], [67, 1], [67, 1], [67, 1], [67, 1], [67, 1], [56, 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 9: this.$ = []; break; case 5: case 10: $$[$0 - 1].push($$[$0]); this.$ = $$[$0 - 1]; break; case 6: case 7: case 11: case 12: this.$ = $$[$0]; break; case 8: case 13: this.$ = []; break; case 15: $$[$0].type = "createParticipant"; this.$ = $$[$0]; break; case 16: $$[$0 - 1].unshift({ type: "boxStart", boxData: yy.parseBoxData($$[$0 - 2]) }); $$[$0 - 1].push({ type: "boxEnd", boxText: $$[$0 - 2] }); this.$ = $$[$0 - 1]; break; case 18: this.$ = { type: "sequenceIndex", sequenceIndex: Number($$[$0 - 2]), sequenceIndexStep: Number($$[$0 - 1]), sequenceVisible: true, signalType: yy.LINETYPE.AUTONUMBER }; break; case 19: this.$ = { type: "sequenceIndex", sequenceIndex: Number($$[$0 - 1]), sequenceIndexStep: 1, sequenceVisible: true, signalType: yy.LINETYPE.AUTONUMBER }; break; case 20: this.$ = { type: "sequenceIndex", sequenceVisible: false, signalType: yy.LINETYPE.AUTONUMBER }; break; case 21: this.$ = { type: "sequenceIndex", sequenceVisible: true, signalType: yy.LINETYPE.AUTONUMBER }; break; case 22: this.$ = { type: "activeStart", signalType: yy.LINETYPE.ACTIVE_START, actor: $$[$0 - 1].actor }; break; case 23: this.$ = { type: "activeEnd", signalType: yy.LINETYPE.ACTIVE_END, actor: $$[$0 - 1].actor }; break; case 29: yy.setDiagramTitle($$[$0].substring(6)); this.$ = $$[$0].substring(6); break; case 30: yy.setDiagramTitle($$[$0].substring(7)); this.$ = $$[$0].substring(7); break; case 31: this.$ = $$[$0].trim(); yy.setAccTitle(this.$); break; case 32: case 33: this.$ = $$[$0].trim(); yy.setAccDescription(this.$); break; case 34: $$[$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 35: $$[$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 36: $$[$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 37: $$[$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 38: $$[$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 39: $$[$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 40: $$[$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 41: $$[$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 43: this.$ = $$[$0 - 3].concat([{ type: "option", optionText: yy.parseMessage($$[$0 - 1]), signalType: yy.LINETYPE.CRITICAL_OPTION }, $$[$0]]); break; case 45: this.$ = $$[$0 - 3].concat([{ type: "and", parText: yy.parseMessage($$[$0 - 1]), signalType: yy.LINETYPE.PAR_AND }, $$[$0]]); break; case 47: this.$ = $$[$0 - 3].concat([{ type: "else", altText: yy.parseMessage($$[$0 - 1]), signalType: yy.LINETYPE.ALT_ELSE }, $$[$0]]); break; case 48: $$[$0 - 3].draw = "participant"; $$[$0 - 3].type = "addParticipant"; $$[$0 - 3].description = yy.parseMessage($$[$0 - 1]); this.$ = $$[$0 - 3]; break; case 49: $$[$0 - 1].draw = "participant"; $$[$0 - 1].type = "addParticipant"; this.$ = $$[$0 - 1]; break; case 50: $$[$0 - 3].draw = "actor"; $$[$0 - 3].type = "addParticipant"; $$[$0 - 3].description = yy.parseMessage($$[$0 - 1]); this.$ = $$[$0 - 3]; break; case 51: $$[$0 - 1].draw = "actor"; $$[$0 - 1].type = "addParticipant"; this.$ = $$[$0 - 1]; break; case 52: $$[$0 - 1].type = "destroyParticipant"; this.$ = $$[$0 - 1]; break; case 53: this.$ = [$$[$0 - 1], { type: "addNote", placement: $$[$0 - 2], actor: $$[$0 - 1].actor, text: $$[$0] }]; break; case 54: $$[$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 55: this.$ = [$$[$0 - 1], { type: "addLinks", actor: $$[$0 - 1].actor, text: $$[$0] }]; break; case 56: this.$ = [$$[$0 - 1], { type: "addALink", actor: $$[$0 - 1].actor, text: $$[$0] }]; break; case 57: this.$ = [$$[$0 - 1], { type: "addProperties", actor: $$[$0 - 1].actor, text: $$[$0] }]; break; case 58: this.$ = [$$[$0 - 1], { type: "addDetails", actor: $$[$0 - 1].actor, text: $$[$0] }]; break; case 61: this.$ = [$$[$0 - 2], $$[$0]]; break; case 62: this.$ = $$[$0]; break; case 63: this.$ = yy.PLACEMENT.LEFTOF; break; case 64: this.$ = yy.PLACEMENT.RIGHTOF; break; case 65: 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 66: 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 67: this.$ = [$$[$0 - 3], $$[$0 - 1], { type: "addMessage", from: $$[$0 - 3].actor, to: $$[$0 - 1].actor, signalType: $$[$0 - 2], msg: $$[$0] }]; break; case 68: this.$ = { type: "addParticipant", actor: $$[$0] }; break; case 69: this.$ = yy.LINETYPE.SOLID_OPEN; break; case 70: this.$ = yy.LINETYPE.DOTTED_OPEN; break; case 71: this.$ = yy.LINETYPE.SOLID; break; case 72: this.$ = yy.LINETYPE.BIDIRECTIONAL_SOLID; break; case 73: this.$ = yy.LINETYPE.DOTTED; break; case 74: this.$ = yy.LINETYPE.BIDIRECTIONAL_DOTTED; break; case 75: this.$ = yy.LINETYPE.SOLID_CROSS; break; case 76: this.$ = yy.LINETYPE.DOTTED_CROSS; break; case 77: this.$ = yy.LINETYPE.SOLID_POINT; break; case 78: this.$ = yy.LINETYPE.DOTTED_POINT; break; case 79: 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, 13, 14, 18, 21, 23, 29, 30, 31, 33, 35, 36, 37, 38, 39, 41, 43, 44, 46, 50, 52, 53, 54, 59, 60, 61, 62, 70], $V3, { 7: 7 }), { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 3], 4: $V4, 5: $V5, 8: 8, 9: 10, 12: 12, 13: $V6, 14: $V7, 17: 15, 18: $V8, 21: $V9, 22: 40, 23: $Va, 24: 19, 25: 20, 26: 21, 27: 22, 28: 23, 29: $Vb, 30: $Vc, 31: $Vd, 33: $Ve, 35: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 41: $Vk, 43: $Vl, 44: $Vm, 46: $Vn, 50: $Vo, 52: $Vp, 53: $Vq, 54: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 70: $Vw }, o2($Vx, [2, 5]), { 9: 47, 12: 12, 13: $V6, 14: $V7, 17: 15, 18: $V8, 21: $V9, 22: 40, 23: $Va, 24: 19, 25: 20, 26: 21, 27: 22, 28: 23, 29: $Vb, 30: $Vc, 31: $Vd, 33: $Ve, 35: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 41: $Vk, 43: $Vl, 44: $Vm, 46: $Vn, 50: $Vo, 52: $Vp, 53: $Vq, 54: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 70: $Vw }, o2($Vx, [2, 7]), o2($Vx, [2, 8]), o2($Vx, [2, 14]), { 12: 48, 50: $Vo, 52: $Vp, 53: $Vq }, { 15: [1, 49] }, { 5: [1, 50] }, { 5: [1, 53], 19: [1, 51], 20: [1, 52] }, { 22: 54, 70: $Vw }, { 22: 55, 70: $Vw }, { 5: [1, 56] }, { 5: [1, 57] }, { 5: [1, 58] }, { 5: [1, 59] }, { 5: [1, 60] }, o2($Vx, [2, 29]), o2($Vx, [2, 30]), { 32: [1, 61] }, { 34: [1, 62] }, o2($Vx, [2, 33]), { 15: [1, 63] }, { 15: [1, 64] }, { 15: [1, 65] }, { 15: [1, 66] }, { 15: [1, 67] }, { 15: [1, 68] }, { 15: [1, 69] }, { 15: [1, 70] }, { 22: 71, 70: $Vw }, { 22: 72, 70: $Vw }, { 22: 73, 70: $Vw }, { 67: 74, 71: [1, 75], 72: [1, 76], 73: [1, 77], 74: [1, 78], 75: [1, 79], 76: [1, 80], 77: [1, 81], 78: [1, 82], 79: [1, 83], 80: [1, 84] }, { 55: 85, 57: [1, 86], 65: [1, 87], 66: [1, 88] }, { 22: 89, 70: $Vw }, { 22: 90, 70: $Vw }, { 22: 91, 70: $Vw }, { 22: 92, 70: $Vw }, o2([5, 51, 64, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81], [2, 68]), o2($Vx, [2, 6]), o2($Vx, [2, 15]), o2($Vy, [2, 9], { 10: 93 }), o2($Vx, [2, 17]), { 5: [1, 95], 19: [1, 94] }, { 5: [1, 96] }, o2($Vx, [2, 21]), { 5: [1, 97] }, { 5: [1, 98] }, o2($Vx, [2, 24]), o2($Vx, [2, 25]), o2($Vx, [2, 26]), o2($Vx, [2, 27]), o2($Vx, [2, 28]), o2($Vx, [2, 31]), o2($Vx, [2, 32]), o2($Vz, $V3, { 7: 99 }), o2($Vz, $V3, { 7: 100 }), o2($Vz, $V3, { 7: 101 }), o2($VA, $V3, { 40: 102, 7: 103 }), o2($VB, $V3, { 42: 104, 7: 105 }), o2($VB, $V3, { 7: 105, 42: 106 }), o2($VC, $V3, { 45: 107, 7: 108 }), o2($Vz, $V3, { 7: 109 }), { 5: [1, 111], 51: [1, 110] }, { 5: [1, 113], 51: [1, 112] }, { 5: [1, 114] }, { 22: 117, 68: [1, 115], 69: [1, 116], 70: $Vw }, o2($VD, [2, 69]), o2($VD, [2, 70]), o2($VD, [2, 71]), o2($VD, [2, 72]), o2($VD, [2, 73]), o2($VD, [2, 74]), o2($VD, [2, 75]), o2($VD, [2, 76]), o2($VD, [2, 77]), o2($VD, [2, 78]), { 22: 118, 70: $Vw }, { 22: 120, 58: 119, 70: $Vw }, { 70: [2, 63] }, { 70: [2, 64] }, { 56: 121, 81: $VE }, { 56: 123, 81: $VE }, { 56: 124, 81: $VE }, { 56: 125, 81: $VE }, { 4: [1, 128], 5: [1, 130], 11: 127, 12: 129, 16: [1, 126], 50: $Vo, 52: $Vp, 53: $Vq }, { 5: [1, 131] }, o2($Vx, [2, 19]), o2($Vx, [2, 20]), o2($Vx, [2, 22]), o2($Vx, [2, 23]), { 4: $V4, 5: $V5, 8: 8, 9: 10, 12: 12, 13: $V6, 14: $V7, 16: [1, 132], 17: 15, 18: $V8, 21: $V9, 22: 40, 23: $Va, 24: 19, 25: 20, 26: 21, 27: 22, 28: 23, 29: $Vb, 30: $Vc, 31: $Vd, 33: $Ve, 35: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 41: $Vk, 43: $Vl, 44: $Vm, 46: $Vn, 50: $Vo, 52: $Vp, 53: $Vq, 54: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 70: $Vw }, { 4: $V4, 5: $V5, 8: 8, 9: 10, 12: 12, 13: $V6, 14: $V7, 16: [1, 133], 17: 15, 18: $V8, 21: $V9, 22: 40, 23: $Va, 24: 19, 25: 20, 26: 21, 27: 22, 28: 23, 29: $Vb, 30: $Vc, 31: $Vd, 33: $Ve, 35: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 41: $Vk, 43: $Vl, 44: $Vm, 46: $Vn, 50: $Vo, 52: $Vp, 53: $Vq, 54: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 70: $Vw }, { 4: $V4, 5: $V5, 8: 8, 9: 10, 12: 12, 13: $V6, 14: $V7, 16: [1, 134], 17: 15, 18: $V8, 21: $V9, 22: 40, 23: $Va, 24: 19, 25: 20, 26: 21, 27: 22, 28: 23, 29: $Vb, 30: $Vc, 31: $Vd, 33: $Ve, 35: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 41: $Vk, 43: $Vl, 44: $Vm, 46: $Vn, 50: $Vo, 52: $Vp, 53: $Vq, 54: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 70: $Vw }, { 16: [1, 135] }, { 4: $V4, 5: $V5, 8: 8, 9: 10, 12: 12, 13: $V6, 14: $V7, 16: [2, 46], 17: 15, 18: $V8, 21: $V9, 22: 40, 23: $Va, 24: 19, 25: 20, 26: 21, 27: 22, 28: 23, 29: $Vb, 30: $Vc, 31: $Vd, 33: $Ve, 35: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 41: $Vk, 43: $Vl, 44: $Vm, 46: $Vn, 49: [1, 136], 50: $Vo, 52: $Vp, 53: $Vq, 54: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 70: $Vw }, { 16: [1, 137] }, { 4: $V4, 5: $V5, 8: 8, 9: 10, 12: 12, 13: $V6, 14: $V7, 16: [2, 44], 17: 15, 18: $V8, 21: $V9, 22: 40, 23: $Va, 24: 19, 25: 20, 26: 21, 27: 22, 28: 23, 29: $Vb, 30: $Vc, 31: $Vd, 33: $Ve, 35: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 41: $Vk, 43: $Vl, 44: $Vm, 46: $Vn, 48: [1, 138], 50: $Vo, 52: $Vp, 53: $Vq, 54: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 70: $Vw }, { 16: [1, 139] }, { 16: [1, 140] }, { 4: $V4, 5: $V5, 8: 8, 9: 10, 12: 12, 13: $V6, 14: $V7, 16: [2, 42], 17: 15, 18: $V8, 21: $V9, 22: 40, 23: $Va, 24: 19, 25: 20, 26: 21, 27: 22, 28: 23, 29: $Vb, 30: $Vc, 31: $Vd, 33: $Ve, 35: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 41: $Vk, 43: $Vl, 44: $Vm, 46: $Vn, 47: [1, 141], 50: $Vo, 52: $Vp, 53: $Vq, 54: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 70: $Vw }, { 4: $V4, 5: $V5, 8: 8, 9: 10, 12: 12, 13: $V6, 14: $V7, 16: [1, 142], 17: 15, 18: $V8, 21: $V9, 22: 40, 23: $Va, 24: 19, 25: 20, 26: 21, 27: 22, 28: 23, 29: $Vb, 30: $Vc, 31: $Vd, 33: $Ve, 35: $Vf, 36: $Vg, 37: $Vh, 38: $Vi, 39: $Vj, 41: $Vk, 43: $Vl, 44: $Vm, 46: $Vn, 50: $Vo, 52: $Vp, 53: $Vq, 54: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 70: $Vw }, { 15: [1, 143] }, o2($Vx, [2, 49]), { 15: [1, 144] }, o2($Vx, [2, 51]), o2($Vx, [2, 52]), { 22: 145, 70: $Vw }, { 22: 146, 70: $Vw }, { 56: 147, 81: $VE }, { 56: 148, 81: $VE }, { 56: 149, 81: $VE }, { 64: [1, 150], 81: [2, 62] }, { 5: [2, 55] }, { 5: [2, 79] }, { 5: [2, 56] }, { 5: [2, 57] }, { 5: [2, 58] }, o2($Vx, [2, 16]), o2($Vy, [2, 10]), { 12: 151, 50: $Vo, 52: $Vp, 53: $Vq }, o2($Vy, [2, 12]), o2($Vy, [2, 13]), o2($Vx, [2, 18]), o2($Vx, [2, 34]), o2($Vx, [2, 35]), o2($Vx, [2, 36]), o2($Vx, [2, 37]), { 15: [1, 152] }, o2($Vx, [2, 38]), { 15: [1, 153] }, o2($Vx, [2, 39]), o2($Vx, [2, 40]), { 15: [1, 154] }, o2($Vx, [2, 41]), { 5: [1, 155] }, { 5: [1, 156] }, { 56: 157, 81: $VE }, { 56: 158, 81: $VE }, { 5: [2, 67] }, { 5: [2, 53] }, { 5: [2, 54] }, { 22: 159, 70: $Vw }, o2($Vy, [2, 11]), o2($VA, $V3, { 7: 103, 40: 160 }), o2($VB, $V3, { 7: 105, 42: 161 }), o2($VC, $V3, { 7: 108, 45: 162 }), o2($Vx, [2, 48]), o2($Vx, [2, 50]), { 5: [2, 65] }, { 5: [2, 66] }, { 81: [2, 61] }, { 16: [2, 47] }, { 16: [2, 45] }, { 16: [2, 43] }], defaultActions: { 5: [2, 1], 6: [2, 2], 87: [2, 63], 88: [2, 64], 121: [2, 55], 122: [2, 79], 123: [2, 56], 124: [2, 57], 125: [2, 58], 147: [2, 67], 148: [2, 53], 149: [2, 54], 157: [2, 65], 158: [2, 66], 159: [2, 61], 160: [2, 47], 161: [2, 45], 162: [2, 43] }, 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 parse8(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 lexer3 = 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]; } } lexer3.setInput(input, sharedState.yy); sharedState.yy.lexer = lexer3; sharedState.yy.parser = this; if (typeof lexer3.yylloc == "undefined") { lexer3.yylloc = {}; } var yyloc = lexer3.yylloc; lstack.push(yyloc); var ranges = lexer3.options && lexer3.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 lex2() { var token2; token2 = tstack.pop() || lexer3.lex() || EOF2; if (typeof token2 !== "number") { if (token2 instanceof Array) { tstack = token2; token2 = tstack.pop(); } token2 = self2.symbols_[token2] || token2; } return token2; } __name(lex2, "lex"); var symbol, preErrorSymbol, state5, action, a2, r2, yyval = {}, p3, len, newState2, expected; while (true) { state5 = stack[stack.length - 1]; if (this.defaultActions[state5]) { action = this.defaultActions[state5]; } else { if (symbol === null || typeof symbol == "undefined") { symbol = lex2(); } action = table[state5] && table[state5][symbol]; } if (typeof action === "undefined" || !action.length || !action[0]) { var errStr = ""; expected = []; for (p3 in table[state5]) { if (this.terminals_[p3] && p3 > TERROR) { expected.push("'" + this.terminals_[p3] + "'"); } } if (lexer3.showPosition) { errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer3.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: lexer3.match, token: this.terminals_[symbol] || symbol, line: lexer3.yylineno, loc: yyloc, expected }); } if (action[0] instanceof Array && action.length > 1) { throw new Error("Parse Error: multiple actions possible at state: " + state5 + ", token: " + symbol); } switch (action[0]) { case 1: stack.push(symbol); vstack.push(lexer3.yytext); lstack.push(lexer3.yylloc); stack.push(action[1]); symbol = null; if (!preErrorSymbol) { yyleng = lexer3.yyleng; yytext = lexer3.yytext; yylineno = lexer3.yylineno; yyloc = lexer3.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 lexer2 = /* @__PURE__ */ function() { var lexer3 = { 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(match2, 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 = match2[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 + match2[0].length }; this.yytext += match2[0]; this.match += match2[0]; this.matches = match2; 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(match2[0].length); this.matched += match2[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, match2, tempMatch, index; if (!this._more) { this.yytext = ""; this.match = ""; } var rules = this._currentRules(); for (var i2 = 0; i2 < rules.length; i2++) { tempMatch = this._input.match(this.rules[rules[i2]]); if (tempMatch && (!match2 || tempMatch[0].length > match2[0].length)) { match2 = tempMatch; index = i2; if (this.options.backtrack_lexer) { token2 = this.test_match(tempMatch, rules[i2]); if (token2 !== false) { return token2; } else if (this._backtrack) { match2 = false; continue; } else { return false; } } else if (!this.options.flex) { break; } } } if (match2) { token2 = this.test_match(match2, rules[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 lex2() { 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 19; break; case 7: this.begin("LINE"); return 14; break; case 8: this.begin("ID"); return 50; break; case 9: this.begin("ID"); return 52; break; case 10: return 13; break; case 11: this.begin("ID"); return 53; break; case 12: yy_.yytext = yy_.yytext.trim(); this.begin("ALIAS"); return 70; break; case 13: this.popState(); this.popState(); this.begin("LINE"); return 51; break; case 14: this.popState(); this.popState(); return 5; break; case 15: this.begin("LINE"); return 36; break; case 16: this.begin("LINE"); return 37; break; case 17: this.begin("LINE"); return 38; break; case 18: this.begin("LINE"); return 39; break; case 19: this.begin("LINE"); return 49; break; case 20: this.begin("LINE"); return 41; break; case 21: this.begin("LINE"); return 43; break; case 22: this.begin("LINE"); return 48; break; case 23: this.begin("LINE"); return 44; break; case 24: this.begin("LINE"); return 47; break; case 25: this.begin("LINE"); return 46; break; case 26: this.popState(); return 15; break; case 27: return 16; break; case 28: return 65; break; case 29: return 66; break; case 30: return 59; break; case 31: return 60; break; case 32: return 61; break; case 33: return 62; break; case 34: return 57; break; case 35: return 54; break; case 36: this.begin("ID"); return 21; break; case 37: this.begin("ID"); return 23; break; case 38: return 29; break; case 39: return 30; break; case 40: this.begin("acc_title"); return 31; break; case 41: this.popState(); return "acc_title_value"; break; case 42: this.begin("acc_descr"); return 33; break; case 43: this.popState(); return "acc_descr_value"; break; case 44: this.begin("acc_descr_multiline"); break; case 45: this.popState(); break; case 46: return "acc_descr_multiline_value"; break; case 47: return 6; break; case 48: return 18; break; case 49: return 20; break; case 50: return 64; break; case 51: return 5; break; case 52: yy_.yytext = yy_.yytext.trim(); return 70; break; case 53: return 73; break; case 54: return 74; break; case 55: return 75; break; case 56: return 76; break; case 57: return 71; break; case 58: return 72; break; case 59: return 77; break; case 60: return 78; break; case 61: return 79; break; case 62: return 80; break; case 63: return 81; break; case 64: return 68; break; case 65: return 69; break; case 66: return 5; break; case 67: return "INVALID"; break; } }, "anonymous"), rules: [/^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:((?!\n)\s)+)/i, /^(?:#[^\n]*)/i, /^(?:%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[0-9]+(?=[ \n]+))/i, /^(?:box\b)/i, /^(?:participant\b)/i, /^(?:actor\b)/i, /^(?:create\b)/i, /^(?:destroy\b)/i, /^(?:[^\<->\->:\n,;]+?([\-]*[^\<->\->:\n,;]+?)*?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/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, /^(?::(?:(?:no)?wrap)?[^#\n;]+)/i, /^(?:\+)/i, /^(?:-)/i, /^(?:$)/i, /^(?:.)/i], conditions: { "acc_descr_multiline": { "rules": [45, 46], "inclusive": false }, "acc_descr": { "rules": [43], "inclusive": false }, "acc_title": { "rules": [41], "inclusive": false }, "ID": { "rules": [2, 3, 12], "inclusive": false }, "ALIAS": { "rules": [2, 3, 13, 14], "inclusive": false }, "LINE": { "rules": [2, 3, 26], "inclusive": false }, "INITIAL": { "rules": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 42, 44, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67], "inclusive": true } } }; return lexer3; }(); parser23.lexer = lexer2; function Parser3() { this.yy = {}; } __name(Parser3, "Parser"); Parser3.prototype = parser23; parser23.Parser = Parser3; return new Parser3(); }(); parser12.parser = parser12; sequenceDiagram_default = parser12; } }); // src/diagrams/sequence/sequenceDb.ts function insertLinks(actor, links3) { if (actor.links == null) { actor.links = links3; } else { for (const key in links3) { actor.links[key] = links3[key]; } } } function insertProperties(actor, properties) { if (actor.properties == null) { actor.properties = properties; } else { for (const key in properties) { actor.properties[key] = properties[key]; } } } function boxEnd() { state3.records.currentBox = void 0; } var state3, addBox, addActor, activationCount, addMessage, addSignal, hasAtLeastOneBox, hasAtLeastOneBoxWithTitle, getMessages, getBoxes, getActors, getCreatedActors, getDestroyedActors, getActor, getActorKeys, enableSequenceNumbers, disableSequenceNumbers, showSequenceNumbers, setWrap2, extractWrap, autoWrap2, clear16, parseMessage, parseBoxData, LINETYPE2, ARROWTYPE2, PLACEMENT2, addNote, addLinks, addALink, addProperties, addDetails, getActorProperty, apply2, sequenceDb_default; var init_sequenceDb = __esm({ "src/diagrams/sequence/sequenceDb.ts"() { "use strict"; init_diagramAPI(); init_logger(); init_imperativeState(); init_common(); init_commonDb(); state3 = 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 })); addBox = /* @__PURE__ */ __name(function(data5) { state3.records.boxes.push({ name: data5.text, wrap: data5.wrap ?? autoWrap2(), fill: data5.color, actorKeys: [] }); state3.records.currentBox = state3.records.boxes.slice(-1)[0]; }, "addBox"); addActor = /* @__PURE__ */ __name(function(id28, name, description, type3) { let assignedBox = state3.records.currentBox; const old = state3.records.actors.get(id28); if (old) { if (state3.records.currentBox && old.box && state3.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 '${state3.records.currentBox.name}' at the same time.` ); } assignedBox = old.box ? old.box : state3.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 }; } state3.records.actors.set(id28, { box: assignedBox, name, description: description.text, wrap: description.wrap ?? autoWrap2(), prevActor: state3.records.prevActor, links: {}, properties: {}, actorCnt: null, rectData: null, type: type3 ?? "participant" }); if (state3.records.prevActor) { const prevActorInRecords = state3.records.actors.get(state3.records.prevActor); if (prevActorInRecords) { prevActorInRecords.nextActor = id28; } } if (state3.records.currentBox) { state3.records.currentBox.actorKeys.push(id28); } state3.records.prevActor = id28; }, "addActor"); activationCount = /* @__PURE__ */ __name((part) => { let i2; let count = 0; if (!part) { return 0; } for (i2 = 0; i2 < state3.records.messages.length; i2++) { if (state3.records.messages[i2].type === LINETYPE2.ACTIVE_START && state3.records.messages[i2].from === part) { count++; } if (state3.records.messages[i2].type === LINETYPE2.ACTIVE_END && state3.records.messages[i2].from === part) { count--; } } return count; }, "activationCount"); addMessage = /* @__PURE__ */ __name(function(idFrom, idTo, message, answer) { state3.records.messages.push({ from: idFrom, to: idTo, message: message.text, wrap: message.wrap ?? autoWrap2(), answer }); }, "addMessage"); addSignal = /* @__PURE__ */ __name(function(idFrom, idTo, message, messageType, activate = false) { if (messageType === LINETYPE2.ACTIVE_END) { const cnt5 = activationCount(idFrom ?? ""); if (cnt5 < 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; } } state3.records.messages.push({ from: idFrom, to: idTo, message: message?.text ?? "", wrap: message?.wrap ?? autoWrap2(), type: messageType, activate }); return true; }, "addSignal"); hasAtLeastOneBox = /* @__PURE__ */ __name(function() { return state3.records.boxes.length > 0; }, "hasAtLeastOneBox"); hasAtLeastOneBoxWithTitle = /* @__PURE__ */ __name(function() { return state3.records.boxes.some((b2) => b2.name); }, "hasAtLeastOneBoxWithTitle"); getMessages = /* @__PURE__ */ __name(function() { return state3.records.messages; }, "getMessages"); getBoxes = /* @__PURE__ */ __name(function() { return state3.records.boxes; }, "getBoxes"); getActors = /* @__PURE__ */ __name(function() { return state3.records.actors; }, "getActors"); getCreatedActors = /* @__PURE__ */ __name(function() { return state3.records.createdActors; }, "getCreatedActors"); getDestroyedActors = /* @__PURE__ */ __name(function() { return state3.records.destroyedActors; }, "getDestroyedActors"); getActor = /* @__PURE__ */ __name(function(id28) { return state3.records.actors.get(id28); }, "getActor"); getActorKeys = /* @__PURE__ */ __name(function() { return [...state3.records.actors.keys()]; }, "getActorKeys"); enableSequenceNumbers = /* @__PURE__ */ __name(function() { state3.records.sequenceNumbersEnabled = true; }, "enableSequenceNumbers"); disableSequenceNumbers = /* @__PURE__ */ __name(function() { state3.records.sequenceNumbersEnabled = false; }, "disableSequenceNumbers"); showSequenceNumbers = /* @__PURE__ */ __name(() => state3.records.sequenceNumbersEnabled, "showSequenceNumbers"); setWrap2 = /* @__PURE__ */ __name(function(wrapSetting) { state3.records.wrapEnabled = wrapSetting; }, "setWrap"); extractWrap = /* @__PURE__ */ __name((text3) => { if (text3 === void 0) { return {}; } text3 = text3.trim(); const wrap3 = /^:?wrap:/.exec(text3) !== null ? true : /^:?nowrap:/.exec(text3) !== null ? false : void 0; const cleanedText = (wrap3 === void 0 ? text3 : text3.replace(/^:?(?:no)?wrap:/, "")).trim(); return { cleanedText, wrap: wrap3 }; }, "extractWrap"); autoWrap2 = /* @__PURE__ */ __name(() => { if (state3.records.wrapEnabled !== void 0) { return state3.records.wrapEnabled; } return getConfig2().sequence?.wrap ?? false; }, "autoWrap"); clear16 = /* @__PURE__ */ __name(function() { state3.reset(); clear(); }, "clear"); parseMessage = /* @__PURE__ */ __name(function(str2) { const trimmedStr = str2.trim(); const { wrap: wrap3, cleanedText } = extractWrap(trimmedStr); const message = { text: cleanedText, wrap: wrap3 }; log.debug(`parseMessage: ${JSON.stringify(message)}`); return message; }, "parseMessage"); parseBoxData = /* @__PURE__ */ __name(function(str2) { const match2 = /^((?:rgba?|hsla?)\s*\(.*\)|\w*)(.*)$/.exec(str2); let color2 = match2?.[1] ? match2[1].trim() : "transparent"; let title2 = match2?.[2] ? match2[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 } = extractWrap(title2); return { text: cleanedText ? sanitizeText(cleanedText, getConfig2()) : void 0, color: color2, wrap: wrap3 }; }, "parseBoxData"); 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 }; ARROWTYPE2 = { FILLED: 0, OPEN: 1 }; PLACEMENT2 = { LEFTOF: 0, RIGHTOF: 1, OVER: 2 }; addNote = /* @__PURE__ */ __name(function(actor, placement, message) { const note3 = { actor, placement, message: message.text, wrap: message.wrap ?? autoWrap2() }; const actors2 = [].concat(actor, actor); state3.records.notes.push(note3); state3.records.messages.push({ from: actors2[0], to: actors2[1], message: message.text, wrap: message.wrap ?? autoWrap2(), type: LINETYPE2.NOTE, placement }); }, "addNote"); addLinks = /* @__PURE__ */ __name(function(actorId, text3) { const actor = getActor(actorId); try { let sanitizedText = sanitizeText(text3.text, getConfig2()); sanitizedText = sanitizedText.replace(/&/g, "&"); sanitizedText = sanitizedText.replace(/=/g, "="); const links3 = JSON.parse(sanitizedText); insertLinks(actor, links3); } catch (e3) { log.error("error while parsing actor link text", e3); } }, "addLinks"); addALink = /* @__PURE__ */ __name(function(actorId, text3) { const actor = getActor(actorId); try { const links3 = {}; let sanitizedText = sanitizeText(text3.text, getConfig2()); const sep2 = sanitizedText.indexOf("@"); sanitizedText = sanitizedText.replace(/&/g, "&"); sanitizedText = sanitizedText.replace(/=/g, "="); const label = sanitizedText.slice(0, sep2 - 1).trim(); const link3 = sanitizedText.slice(sep2 + 1).trim(); links3[label] = link3; insertLinks(actor, links3); } catch (e3) { log.error("error while parsing actor link text", e3); } }, "addALink"); __name(insertLinks, "insertLinks"); addProperties = /* @__PURE__ */ __name(function(actorId, text3) { const actor = getActor(actorId); try { const sanitizedText = sanitizeText(text3.text, getConfig2()); const properties = JSON.parse(sanitizedText); insertProperties(actor, properties); } catch (e3) { log.error("error while parsing actor properties text", e3); } }, "addProperties"); __name(insertProperties, "insertProperties"); __name(boxEnd, "boxEnd"); addDetails = /* @__PURE__ */ __name(function(actorId, text3) { const actor = getActor(actorId); const elem = document.getElementById(text3.text); try { const text4 = elem.innerHTML; const details = JSON.parse(text4); if (details.properties) { insertProperties(actor, details.properties); } if (details.links) { insertLinks(actor, details.links); } } catch (e3) { log.error("error while parsing actor details text", e3); } }, "addDetails"); getActorProperty = /* @__PURE__ */ __name(function(actor, key) { if (actor?.properties !== void 0) { return actor.properties[key]; } return void 0; }, "getActorProperty"); apply2 = /* @__PURE__ */ __name(function(param) { if (Array.isArray(param)) { param.forEach(function(item) { apply2(item); }); } else { switch (param.type) { case "sequenceIndex": state3.records.messages.push({ from: void 0, to: void 0, message: { start: param.sequenceIndex, step: param.sequenceIndexStep, visible: param.sequenceVisible }, wrap: false, type: param.signalType }); break; case "addParticipant": addActor(param.actor, param.actor, param.description, param.draw); break; case "createParticipant": if (state3.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" ); } state3.records.lastCreated = param.actor; addActor(param.actor, param.actor, param.description, param.draw); state3.records.createdActors.set(param.actor, state3.records.messages.length); break; case "destroyParticipant": state3.records.lastDestroyed = param.actor; state3.records.destroyedActors.set(param.actor, state3.records.messages.length); break; case "activeStart": addSignal(param.actor, void 0, void 0, param.signalType); break; case "activeEnd": addSignal(param.actor, void 0, void 0, param.signalType); break; case "addNote": addNote(param.actor, param.placement, param.text); break; case "addLinks": addLinks(param.actor, param.text); break; case "addALink": addALink(param.actor, param.text); break; case "addProperties": addProperties(param.actor, param.text); break; case "addDetails": addDetails(param.actor, param.text); break; case "addMessage": if (state3.records.lastCreated) { if (param.to !== state3.records.lastCreated) { throw new Error( "The created participant " + state3.records.lastCreated.name + " does not have an associated creating message after its declaration. Please check the sequence diagram." ); } else { state3.records.lastCreated = void 0; } } else if (state3.records.lastDestroyed) { if (param.to !== state3.records.lastDestroyed && param.from !== state3.records.lastDestroyed) { throw new Error( "The destroyed participant " + state3.records.lastDestroyed.name + " does not have an associated destroying message after its declaration. Please check the sequence diagram." ); } else { state3.records.lastDestroyed = void 0; } } addSignal(param.from, param.to, param.msg, param.signalType, param.activate); break; case "boxStart": addBox(param.boxData); break; case "boxEnd": boxEnd(); break; case "loopStart": addSignal(void 0, void 0, param.loopText, param.signalType); break; case "loopEnd": addSignal(void 0, void 0, void 0, param.signalType); break; case "rectStart": addSignal(void 0, void 0, param.color, param.signalType); break; case "rectEnd": addSignal(void 0, void 0, void 0, param.signalType); break; case "optStart": addSignal(void 0, void 0, param.optText, param.signalType); break; case "optEnd": addSignal(void 0, void 0, void 0, param.signalType); break; case "altStart": addSignal(void 0, void 0, param.altText, param.signalType); break; case "else": addSignal(void 0, void 0, param.altText, param.signalType); break; case "altEnd": addSignal(void 0, void 0, void 0, param.signalType); break; case "setAccTitle": setAccTitle(param.text); break; case "parStart": addSignal(void 0, void 0, param.parText, param.signalType); break; case "and": addSignal(void 0, void 0, param.parText, param.signalType); break; case "parEnd": addSignal(void 0, void 0, void 0, param.signalType); break; case "criticalStart": addSignal(void 0, void 0, param.criticalText, param.signalType); break; case "option": addSignal(void 0, void 0, param.optionText, param.signalType); break; case "criticalEnd": addSignal(void 0, void 0, void 0, param.signalType); break; case "breakStart": addSignal(void 0, void 0, param.breakText, param.signalType); break; case "breakEnd": addSignal(void 0, void 0, void 0, param.signalType); break; } } }, "apply"); sequenceDb_default = { addActor, addMessage, addSignal, addLinks, addDetails, addProperties, autoWrap: autoWrap2, setWrap: setWrap2, enableSequenceNumbers, disableSequenceNumbers, showSequenceNumbers, getMessages, getActors, getCreatedActors, getDestroyedActors, getActor, getActorKeys, getActorProperty, getAccTitle, getBoxes, getDiagramTitle, setDiagramTitle, getConfig: /* @__PURE__ */ __name(() => getConfig2().sequence, "getConfig"), clear: clear16, parseMessage, parseBoxData, LINETYPE: LINETYPE2, ARROWTYPE: ARROWTYPE2, PLACEMENT: PLACEMENT2, addNote, setAccTitle, apply: apply2, setAccDescription, getAccDescription, hasAtLeastOneBox, hasAtLeastOneBoxWithTitle }; } }); // src/diagrams/sequence/styles.js var getStyles9, styles_default8; var init_styles8 = __esm({ "src/diagrams/sequence/styles.js"() { "use strict"; getStyles9 = /* @__PURE__ */ __name((options3) => `.actor { stroke: ${options3.actorBorder}; fill: ${options3.actorBkg}; } text.actor > tspan { fill: ${options3.actorTextColor}; stroke: none; } .actor-line { stroke: ${options3.actorLineColor}; } .messageLine0 { stroke-width: 1.5; stroke-dasharray: none; stroke: ${options3.signalColor}; } .messageLine1 { stroke-width: 1.5; stroke-dasharray: 2, 2; stroke: ${options3.signalColor}; } #arrowhead path { fill: ${options3.signalColor}; stroke: ${options3.signalColor}; } .sequenceNumber { fill: ${options3.sequenceNumberColor}; } #sequencenumber { fill: ${options3.signalColor}; } #crosshead path { fill: ${options3.signalColor}; stroke: ${options3.signalColor}; } .messageText { fill: ${options3.signalTextColor}; stroke: none; } .labelBox { stroke: ${options3.labelBoxBorderColor}; fill: ${options3.labelBoxBkgColor}; } .labelText, .labelText > tspan { fill: ${options3.labelTextColor}; stroke: none; } .loopText, .loopText > tspan { fill: ${options3.loopTextColor}; stroke: none; } .loopLine { stroke-width: 2px; stroke-dasharray: 2, 2; stroke: ${options3.labelBoxBorderColor}; fill: ${options3.labelBoxBorderColor}; } .note { //stroke: #decc93; stroke: ${options3.noteBorderColor}; fill: ${options3.noteBkgColor}; } .noteText, .noteText > tspan { fill: ${options3.noteTextColor}; stroke: none; } .activation0 { fill: ${options3.activationBkgColor}; stroke: ${options3.activationBorderColor}; } .activation1 { fill: ${options3.activationBkgColor}; stroke: ${options3.activationBorderColor}; } .activation2 { fill: ${options3.activationBkgColor}; stroke: ${options3.activationBorderColor}; } .actorPopupMenu { position: absolute; } .actorPopupMenuPanel { position: absolute; fill: ${options3.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 line { stroke: ${options3.actorBorder}; fill: ${options3.actorBkg}; } .actor-man circle, line { stroke: ${options3.actorBorder}; fill: ${options3.actorBkg}; stroke-width: 2px; } `, "getStyles"); styles_default8 = getStyles9; } }); // 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, drawRect4, drawPopup, popupMenuToggle, drawKatex, drawText3, drawLabel, actorCnt, fixLifeLineHeights, drawActorTypeParticipant, drawActorTypeActor, drawActor, drawBox, anchorElement, drawActivation, drawLoop, drawBackgroundRect2, insertDatabaseIcon2, insertComputerIcon2, insertClockIcon2, insertArrowHead2, insertArrowFilledHead2, insertSequenceNumber, insertArrowCrossHead2, getTextObj3, getNoteRect2, _drawTextCandidateFunc2, _drawMenuItemTextCandidateFunc, svgDraw_default2; var init_svgDraw2 = __esm({ "src/diagrams/sequence/svgDraw.js"() { "use strict"; init_common(); init_svgDrawCommon(); init_utils2(); import_sanitize_url5 = __toESM(require_dist(), 1); init_config(); 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"; drawRect4 = /* @__PURE__ */ __name(function(elem, rectData) { return drawRect(elem, rectData); }, "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 lines = await renderKatex(textData.text, getConfig()); const divElem = textElem.append("xhtml:div").attr("style", "width: fit-content;").attr("xmlns", "http://www.w3.org/1999/xhtml").html(lines); 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 text3 = 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(text3); } else { textElem.text(text3); } 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, y5, width3, height2, cut) { return x5 + "," + y5 + " " + (x5 + width3) + "," + y5 + " " + (x5 + width3) + "," + (y5 + height2 - cut) + " " + (x5 + width3 - cut * 1.2) + "," + (y5 + height2) + " " + x5 + "," + (y5 + 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((diagram25, actors2, actorKeys, conf7) => { if (!diagram25.select) { return; } actorKeys.forEach((actorKey) => { const actor = actors2.get(actorKey); const actorDOM = diagram25.select("#actor" + actor.actorCnt); if (!conf7.mirrorActors && actor.stopy) { actorDOM.attr("y2", actor.stopy + actor.height / 2); } else if (conf7.mirrorActors) { actorDOM.attr("y2", actor.stopy); } }); }, "fixLifeLineHeights"); drawActorTypeParticipant = /* @__PURE__ */ __name(function(elem, actor, conf7, isFooter) { const actorY = isFooter ? actor.stopy : actor.starty; const center4 = actor.x + actor.width / 2; const centerY = actorY + actor.height; const boxplusLineGroup = elem.append("g").lower(); var g2 = boxplusLineGroup; if (!isFooter) { actorCnt++; if (Object.keys(actor.links || {}).length && !conf7.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); g2 = boxplusLineGroup.append("g"); actor.actorCnt = actorCnt; if (actor.links != null) { g2.attr("id", "root-" + actorCnt); } } 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; const rectElem = drawRect4(g2, rect3); 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); } } _drawTextCandidateFunc2(conf7, hasKatex(actor.description))( actor.description, g2, rect3.x, rect3.y, rect3.width, rect3.height, { class: `actor ${ACTOR_BOX_CLASS}` }, conf7 ); let height2 = actor.height; if (rectElem.node) { const bounds4 = rectElem.node().getBBox(); actor.height = bounds4.height; height2 = bounds4.height; } return height2; }, "drawActorTypeParticipant"); drawActorTypeActor = /* @__PURE__ */ __name(function(elem, actor, conf7, isFooter) { const actorY = isFooter ? actor.stopy : actor.starty; const center4 = actor.x + actor.width / 2; const centerY = actorY + 80; 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); 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"; rect3.rx = 3; rect3.ry = 3; actElem.append("line").attr("id", "actor-man-torso" + actorCnt).attr("x1", center4).attr("y1", actorY + 25).attr("x2", center4).attr("y2", actorY + 45); actElem.append("line").attr("id", "actor-man-arms" + actorCnt).attr("x1", center4 - ACTOR_TYPE_WIDTH / 2).attr("y1", actorY + 33).attr("x2", center4 + ACTOR_TYPE_WIDTH / 2).attr("y2", actorY + 33); actElem.append("line").attr("x1", center4 - ACTOR_TYPE_WIDTH / 2).attr("y1", actorY + 60).attr("x2", center4).attr("y2", actorY + 45); actElem.append("line").attr("x1", center4).attr("y1", actorY + 45).attr("x2", center4 + ACTOR_TYPE_WIDTH / 2 - 2).attr("y2", actorY + 60); const circle6 = actElem.append("circle"); circle6.attr("cx", actor.x + actor.width / 2); circle6.attr("cy", actorY + 10); circle6.attr("r", 15); circle6.attr("width", actor.width); circle6.attr("height", actor.height); const bounds4 = actElem.node().getBBox(); actor.height = bounds4.height; _drawTextCandidateFunc2(conf7, hasKatex(actor.description))( actor.description, actElem, rect3.x, rect3.y + 35, rect3.width, rect3.height, { class: `actor ${ACTOR_MAN_FIGURE_CLASS}` }, conf7 ); return actor.height; }, "drawActorTypeActor"); drawActor = /* @__PURE__ */ __name(async function(elem, actor, conf7, isFooter) { switch (actor.type) { case "actor": return await drawActorTypeActor(elem, actor, conf7, isFooter); case "participant": return await drawActorTypeParticipant(elem, actor, conf7, isFooter); } }, "drawActor"); drawBox = /* @__PURE__ */ __name(function(elem, box, conf7) { const boxplusTextGroup = elem.append("g"); const g2 = boxplusTextGroup; drawBackgroundRect2(g2, box); if (box.name) { _drawTextCandidateFunc2(conf7)( box.name, g2, box.x, box.y + (box.textMaxHeight || 0) / 2, box.width, 0, { class: "text" }, conf7 ); } g2.lower(); }, "drawBox"); anchorElement = /* @__PURE__ */ __name(function(elem) { return elem.append("g"); }, "anchorElement"); drawActivation = /* @__PURE__ */ __name(function(elem, bounds4, verticalPos, conf7, actorActivations2) { const rect3 = getNoteRect(); const g2 = bounds4.anchored; rect3.x = bounds4.startx; rect3.y = bounds4.starty; rect3.class = "activation" + actorActivations2 % 3; rect3.width = bounds4.stopx - bounds4.startx; rect3.height = verticalPos - bounds4.starty; drawRect4(g2, rect3); }, "drawActivation"); drawLoop = /* @__PURE__ */ __name(async function(elem, loopModel, labelText, conf7) { const { boxMargin, boxTextMargin, labelBoxHeight, labelBoxWidth, messageFontFamily: fontFamily, messageFontSize: fontSize, messageFontWeight: fontWeight } = conf7; const g2 = elem.append("g"); 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 = labelBoxWidth || 50; txt.height = labelBoxHeight || 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 = "loopText"; 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) { elem.append("defs").append("symbol").attr("id", "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) { elem.append("defs").append("symbol").attr("id", "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) { elem.append("defs").append("symbol").attr("id", "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) { elem.append("defs").append("marker").attr("id", "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) { elem.append("defs").append("marker").attr("id", "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) { elem.append("defs").append("marker").attr("id", "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) { const defs2 = elem.append("defs"); const marker = defs2.append("marker").attr("id", "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"); 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, y5, width3, height2, textAttrs) { const text3 = g2.append("text").attr("x", x5 + width3 / 2).attr("y", y5 + height2 / 2 + 5).style("text-anchor", "middle").text(content); _setTextAttrs(text3, textAttrs); } __name(byText, "byText"); function byTspan(content, g2, x5, y5, width3, height2, textAttrs, conf7) { const { actorFontSize, actorFontFamily, actorFontWeight } = conf7; 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 text3 = g2.append("text").attr("x", x5 + width3 / 2).attr("y", y5).style("text-anchor", "middle").style("font-size", _actorFontSizePx).style("font-weight", actorFontWeight).style("font-family", actorFontFamily); text3.append("tspan").attr("x", x5 + width3 / 2).attr("dy", dy).text(lines[i2]); text3.attr("y", y5 + height2 / 2).attr("dominant-baseline", "central").attr("alignment-baseline", "central"); _setTextAttrs(text3, textAttrs); } } __name(byTspan, "byTspan"); function byFo(content, g2, x5, y5, width3, height2, textAttrs, conf7) { const s2 = g2.append("switch"); const f3 = s2.append("foreignObject").attr("x", x5).attr("y", y5).attr("width", width3).attr("height", height2); const text3 = f3.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%"); text3.append("div").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content); byTspan(content, s2, x5, y5, width3, height2, textAttrs, conf7); _setTextAttrs(text3, textAttrs); } __name(byFo, "byFo"); async function byKatex(content, g2, x5, y5, width3, height2, textAttrs, conf7) { const dim = await calculateMathMLDimensions(content, getConfig()); const s2 = g2.append("switch"); const f3 = s2.append("foreignObject").attr("x", x5 + width3 / 2 - dim.width / 2).attr("y", y5 + height2 / 2 - dim.height / 2).attr("width", dim.width).attr("height", dim.height); const text3 = f3.append("xhtml:div").style("height", "100%").style("width", "100%"); text3.append("div").style("text-align", "center").style("vertical-align", "middle").html(await renderKatex(content, getConfig())); byTspan(content, s2, x5, y5, width3, height2, textAttrs, conf7); _setTextAttrs(text3, 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(conf7, hasKatex2 = false) { if (hasKatex2) { return byKatex; } return conf7.textPlacement === "fo" ? byFo : conf7.textPlacement === "old" ? byText : byTspan; }; }(); _drawMenuItemTextCandidateFunc = /* @__PURE__ */ function() { function byText(content, g2, x5, y5, width3, height2, textAttrs) { const text3 = g2.append("text").attr("x", x5).attr("y", y5).style("text-anchor", "start").text(content); _setTextAttrs(text3, textAttrs); } __name(byText, "byText"); function byTspan(content, g2, x5, y5, width3, height2, textAttrs, conf7) { const { actorFontSize, actorFontFamily, actorFontWeight } = conf7; 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 text3 = g2.append("text").attr("x", x5).attr("y", y5).style("text-anchor", "start").style("font-size", actorFontSize).style("font-weight", actorFontWeight).style("font-family", actorFontFamily); text3.append("tspan").attr("x", x5).attr("dy", dy).text(lines[i2]); text3.attr("y", y5 + height2 / 2).attr("dominant-baseline", "central").attr("alignment-baseline", "central"); _setTextAttrs(text3, textAttrs); } } __name(byTspan, "byTspan"); function byFo(content, g2, x5, y5, width3, height2, textAttrs, conf7) { const s2 = g2.append("switch"); const f3 = s2.append("foreignObject").attr("x", x5).attr("y", y5).attr("width", width3).attr("height", height2); const text3 = f3.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%"); text3.append("div").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content); byTspan(content, s2, x5, y5, width3, height2, textAttrs, conf7); _setTextAttrs(text3, 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(conf7) { return conf7.textPlacement === "fo" ? byFo : conf7.textPlacement === "old" ? byText : byTspan; }; }(); 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 }; } }); // src/diagrams/sequence/sequenceRenderer.ts async function boundMessage(_diagram, msgModel) { bounds.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(conf4)); if (!isKatexMsg) { const lineHeight = textDims.height / lines; msgModel.height += lineHeight; bounds.bumpVerticalPos(lineHeight); } let lineStartY; let totalOffset = textDims.height - 10; const textWidth = textDims.width; if (startx === stopx) { lineStartY = bounds.getVerticalPos() + totalOffset; if (!conf4.rightAngles) { totalOffset += conf4.boxMargin; lineStartY = bounds.getVerticalPos() + totalOffset; } totalOffset += 30; const dx = common_default.getMax(textWidth / 2, conf4.width / 2); bounds.insert( startx - dx, bounds.getVerticalPos() - 10 + totalOffset, stopx + dx, bounds.getVerticalPos() + 30 + totalOffset ); } else { totalOffset += conf4.boxMargin; lineStartY = bounds.getVerticalPos() + totalOffset; bounds.insert(startx, lineStartY - 10, stopx, lineStartY); } bounds.bumpVerticalPos(totalOffset); msgModel.height += totalOffset; msgModel.stopy = msgModel.starty + msgModel.height; bounds.insert(msgModel.fromBounds, msgModel.starty, msgModel.toBounds, msgModel.stopy); return lineStartY; } function adjustLoopHeightForWrap(loopWidths, msg, preMargin, postMargin, addLoopFn) { bounds.bumpVerticalPos(preMargin); let heightAdjust = postMargin; if (msg.id && msg.message && loopWidths[msg.id]) { const loopWidth = loopWidths[msg.id].width; const textConf = messageFont2(conf4); msg.message = utils_default2.wrapLabel(`[${msg.message}]`, loopWidth - 2 * conf4.wrapPadding, textConf); msg.width = loopWidth; msg.wrap = true; const textDims = utils_default2.calculateTextDimensions(msg.message, textConf); const totalOffset = common_default.getMax(textDims.height, conf4.labelBoxHeight); heightAdjust = postMargin + totalOffset; log.debug(`${totalOffset} - ${msg.message}`); } addLoopFn(msg); bounds.bumpVerticalPos(heightAdjust); } function adjustCreatedDestroyedData(msg, msgModel, lineStartY, index, actors2, createdActors, destroyedActors) { function receiverAdjustment(actor, adjustment) { if (actor.x < actors2.get(msg.from).x) { bounds.insert( msgModel.stopx - adjustment, msgModel.starty, msgModel.startx, msgModel.stopy + actor.height / 2 + conf4.noteMargin ); msgModel.stopx = msgModel.stopx + adjustment; } else { bounds.insert( msgModel.startx, msgModel.starty, msgModel.stopx + adjustment, msgModel.stopy + actor.height / 2 + conf4.noteMargin ); msgModel.stopx = msgModel.stopx - adjustment; } } __name(receiverAdjustment, "receiverAdjustment"); function senderAdjustment(actor, adjustment) { if (actor.x < actors2.get(msg.to).x) { bounds.insert( msgModel.startx - adjustment, msgModel.starty, msgModel.stopx, msgModel.stopy + actor.height / 2 + conf4.noteMargin ); msgModel.startx = msgModel.startx + adjustment; } else { bounds.insert( msgModel.stopx, msgModel.starty, msgModel.startx + adjustment, msgModel.stopy + actor.height / 2 + conf4.noteMargin ); msgModel.startx = msgModel.startx - adjustment; } } __name(senderAdjustment, "senderAdjustment"); if (createdActors.get(msg.to) == index) { const actor = actors2.get(msg.to); const adjustment = actor.type == "actor" ? ACTOR_TYPE_WIDTH / 2 + 3 : actor.width / 2 + 3; receiverAdjustment(actor, adjustment); actor.starty = lineStartY - actor.height / 2; bounds.bumpVerticalPos(actor.height / 2); } else if (destroyedActors.get(msg.from) == index) { const actor = actors2.get(msg.from); if (conf4.mirrorActors) { const adjustment = actor.type == "actor" ? ACTOR_TYPE_WIDTH / 2 : actor.width / 2; senderAdjustment(actor, adjustment); } actor.stopy = lineStartY - actor.height / 2; bounds.bumpVerticalPos(actor.height / 2); } else if (destroyedActors.get(msg.to) == index) { const actor = actors2.get(msg.to); if (conf4.mirrorActors) { const adjustment = actor.type == "actor" ? ACTOR_TYPE_WIDTH / 2 + 3 : actor.width / 2 + 3; receiverAdjustment(actor, adjustment); } actor.stopy = lineStartY - actor.height / 2; bounds.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(conf4) : messageFont2(conf4); const wrappedMessage = msg.wrap ? utils_default2.wrapLabel(msg.message, conf4.width - 2 * conf4.wrapPadding, textFont) : msg.message; const messageDimensions = hasKatex(wrappedMessage) ? await calculateMathMLDimensions(msg.message, getConfig2()) : utils_default2.calculateTextDimensions(wrappedMessage, textFont); const messageWidth = messageDimensions.width + 2 * conf4.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, conf4.width - 2 * conf4.wrapPadding, actorFont(conf4) ); } const actDims = hasKatex(actor.description) ? await calculateMathMLDimensions(actor.description, getConfig2()) : utils_default2.calculateTextDimensions(actor.description, actorFont(conf4)); actor.width = actor.wrap ? conf4.width : common_default.getMax(conf4.width, actDims.width + 2 * conf4.wrapPadding); actor.height = actor.wrap ? common_default.getMax(actDims.height, conf4.height) : conf4.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 + conf4.actorMargin - actor.width / 2; actor.margin = common_default.getMax(actorWidth2, conf4.actorMargin); continue; } const messageWidth = actorToMessageWidth[actorKey]; const actorWidth = messageWidth + conf4.actorMargin - actor.width / 2 - nextActor.width / 2; actor.margin = common_default.getMax(actorWidth, conf4.actorMargin); } let maxBoxHeight = 0; boxes.forEach((box) => { const textFont = messageFont2(conf4); let totalWidth = box.actorKeys.reduce((total, aKey) => { return total += actors2.get(aKey).width + (actors2.get(aKey).margin || 0); }, 0); totalWidth -= 2 * conf4.boxTextMargin; if (box.wrap) { box.name = utils_default2.wrapLabel(box.name, totalWidth - 2 * conf4.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 * conf4.wrapPadding); box.margin = conf4.boxTextMargin; if (totalWidth < minWidth) { const missing = (minWidth - totalWidth) / 2; box.margin += missing; } }); boxes.forEach((box) => box.textMaxHeight = maxBoxHeight); return common_default.getMax(maxHeight, conf4.height); } var conf4, bounds, drawNote, messageFont2, noteFont, actorFont, drawMessage, addActorRenderingData, drawActors, drawActorsPopup, setConf4, actorActivations, activationBounds, draw11, getRequiredPopupWidth, buildNoteModel, buildMessageModel, calculateLoopBounds, sequenceRenderer_default; var init_sequenceRenderer = __esm({ "src/diagrams/sequence/sequenceRenderer.ts"() { "use strict"; init_src32(); init_svgDraw2(); init_logger(); init_common(); init_svgDrawCommon(); init_diagramAPI(); init_assignWithDepth(); init_utils2(); init_setupGraphViewbox(); conf4 = {}; bounds = { 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, h2) => acc + h2)) + (this.messages.length === 0 ? 0 : this.messages.map((it) => it.height || 0).reduce((acc, h2) => acc + h2)) + (this.notes.length === 0 ? 0 : this.notes.map((it) => it.height || 0).reduce((acc, h2) => acc + h2)); }, "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; setConf4(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 cnt5 = 0; function updateFn(type3) { return /* @__PURE__ */ __name(function updateItemBounds(item) { cnt5++; const n2 = _self.sequenceItems.length - cnt5 + 1; _self.updateVal(item, "starty", starty - n2 * conf4.boxMargin, Math.min); _self.updateVal(item, "stopy", stopy + n2 * conf4.boxMargin, Math.max); _self.updateVal(bounds.data, "startx", startx - n2 * conf4.boxMargin, Math.min); _self.updateVal(bounds.data, "stopx", stopx + n2 * conf4.boxMargin, Math.max); if (!(type3 === "activation")) { _self.updateVal(item, "startx", startx - n2 * conf4.boxMargin, Math.min); _self.updateVal(item, "stopx", stopx + n2 * conf4.boxMargin, Math.max); _self.updateVal(bounds.data, "starty", starty - n2 * conf4.boxMargin, Math.min); _self.updateVal(bounds.data, "stopy", stopy + n2 * conf4.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(bounds.data, "startx", _startx, Math.min); this.updateVal(bounds.data, "starty", _starty, Math.min); this.updateVal(bounds.data, "stopx", _stopx, Math.max); this.updateVal(bounds.data, "stopy", _stopy, Math.max); this.updateBounds(_startx, _starty, _stopx, _stopy); }, "insert"), newActivation: /* @__PURE__ */ __name(function(message, diagram25, actors2) { const actorRect = actors2.get(message.from); const stackedSize = actorActivations(message.from).length || 0; const x5 = actorRect.x + actorRect.width / 2 + (stackedSize - 1) * conf4.activationWidth / 2; this.activations.push({ startx: x5, starty: this.verticalPos + 2, stopx: x5 + conf4.activationWidth, stopy: void 0, actor: message.from, anchored: svgDraw_default2.anchorElement(diagram25) }); }, "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: bounds.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) { bounds.bumpVerticalPos(conf4.boxMargin); noteModel.height = conf4.boxMargin; noteModel.starty = bounds.getVerticalPos(); const rect3 = getNoteRect(); rect3.x = noteModel.startx; rect3.y = noteModel.starty; rect3.width = noteModel.width || conf4.width; rect3.class = "note"; const g2 = elem.append("g"); 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 = conf4.noteFontFamily; textObj.fontSize = conf4.noteFontSize; textObj.fontWeight = conf4.noteFontWeight; textObj.anchor = conf4.noteAlign; textObj.textMargin = conf4.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 * conf4.noteMargin); noteModel.height += textHeight + 2 * conf4.noteMargin; bounds.bumpVerticalPos(textHeight + 2 * conf4.noteMargin); noteModel.stopy = noteModel.starty + textHeight + 2 * conf4.noteMargin; noteModel.stopx = noteModel.startx + rect3.width; bounds.insert(noteModel.startx, noteModel.starty, noteModel.stopx, noteModel.stopy); bounds.models.addNote(noteModel); }, "drawNote"); 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(diagram25, msgModel, lineStartY, diagObj) { const { startx, stopx, starty, message, type: type3, sequenceIndex, sequenceVisible } = msgModel; const textDims = utils_default2.calculateTextDimensions(message, messageFont2(conf4)); const textObj = getTextObj(); textObj.x = startx; textObj.y = starty + 10; textObj.width = stopx - startx; textObj.class = "messageText"; textObj.dy = "1em"; textObj.text = message; textObj.fontFamily = conf4.messageFontFamily; textObj.fontSize = conf4.messageFontSize; textObj.fontWeight = conf4.messageFontWeight; textObj.anchor = conf4.messageAlign; textObj.valign = "center"; textObj.textMargin = conf4.wrapPadding; textObj.tspan = false; if (hasKatex(textObj.text)) { await drawKatex(diagram25, textObj, { startx, stopx, starty: lineStartY }); } else { drawText3(diagram25, textObj); } const textWidth = textDims.width; let line2; if (startx === stopx) { if (conf4.rightAngles) { line2 = diagram25.append("path").attr( "d", `M ${startx},${lineStartY} H ${startx + common_default.getMax(conf4.width / 2, textWidth / 2)} V ${lineStartY + 25} H ${startx}` ); } else { line2 = diagram25.append("path").attr( "d", "M " + startx + "," + lineStartY + " C " + (startx + 60) + "," + (lineStartY - 10) + " " + (startx + 60) + "," + (lineStartY + 30) + " " + startx + "," + (lineStartY + 20) ); } } else { line2 = diagram25.append("line"); line2.attr("x1", startx); line2.attr("y1", lineStartY); line2.attr("x2", stopx); line2.attr("y2", 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) { line2.style("stroke-dasharray", "3, 3"); line2.attr("class", "messageLine1"); } else { line2.attr("class", "messageLine0"); } let url = ""; if (conf4.arrowMarkerAbsolute) { url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; url = url.replace(/\(/g, "\\("); url = url.replace(/\)/g, "\\)"); } line2.attr("stroke-width", 2); line2.attr("stroke", "none"); line2.style("fill", "none"); if (type3 === diagObj.db.LINETYPE.SOLID || type3 === diagObj.db.LINETYPE.DOTTED) { line2.attr("marker-end", "url(" + url + "#arrowhead)"); } if (type3 === diagObj.db.LINETYPE.BIDIRECTIONAL_SOLID || type3 === diagObj.db.LINETYPE.BIDIRECTIONAL_DOTTED) { line2.attr("marker-start", "url(" + url + "#arrowhead)"); line2.attr("marker-end", "url(" + url + "#arrowhead)"); } if (type3 === diagObj.db.LINETYPE.SOLID_POINT || type3 === diagObj.db.LINETYPE.DOTTED_POINT) { line2.attr("marker-end", "url(" + url + "#filled-head)"); } if (type3 === diagObj.db.LINETYPE.SOLID_CROSS || type3 === diagObj.db.LINETYPE.DOTTED_CROSS) { line2.attr("marker-end", "url(" + url + "#crosshead)"); } if (sequenceVisible || conf4.showSequenceNumbers) { line2.attr("marker-start", "url(" + url + "#sequencenumber)"); diagram25.append("text").attr("x", startx).attr("y", lineStartY + 4).attr("font-family", "sans-serif").attr("font-size", "12px").attr("text-anchor", "middle").attr("class", "sequenceNumber").text(sequenceIndex); } }, "drawMessage"); addActorRenderingData = /* @__PURE__ */ __name(function(diagram25, 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) { bounds.models.addBox(prevBox); } prevMargin += conf4.boxMargin + prevBox.margin; } if (box && box != prevBox) { if (!isFooter) { box.x = prevWidth + prevMargin; box.y = verticalPos; } prevMargin += box.margin; } actor.width = actor.width || conf4.width; actor.height = common_default.getMax(actor.height || conf4.height, conf4.height); actor.margin = actor.margin || conf4.actorMargin; maxHeight = common_default.getMax(maxHeight, actor.height); if (createdActors.get(actor.name)) { prevMargin += actor.width / 2; } actor.x = prevWidth + prevMargin; actor.starty = bounds.getVerticalPos(); bounds.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; bounds.models.addActor(actor); } if (prevBox && !isFooter) { bounds.models.addBox(prevBox); } bounds.bumpVerticalPos(maxHeight); }, "addActorRenderingData"); drawActors = /* @__PURE__ */ __name(async function(diagram25, actors2, actorKeys, isFooter) { if (!isFooter) { for (const actorKey of actorKeys) { const actor = actors2.get(actorKey); await svgDraw_default2.drawActor(diagram25, actor, conf4, false); } } else { let maxHeight = 0; bounds.bumpVerticalPos(conf4.boxMargin * 2); for (const actorKey of actorKeys) { const actor = actors2.get(actorKey); if (!actor.stopy) { actor.stopy = bounds.getVerticalPos(); } const height2 = await svgDraw_default2.drawActor(diagram25, actor, conf4, true); maxHeight = common_default.getMax(maxHeight, height2); } bounds.bumpVerticalPos(maxHeight + conf4.boxMargin); } }, "drawActors"); drawActorsPopup = /* @__PURE__ */ __name(function(diagram25, actors2, actorKeys, doc) { let maxHeight = 0; let maxWidth = 0; for (const actorKey of actorKeys) { const actor = actors2.get(actorKey); const minMenuWidth = getRequiredPopupWidth(actor); const menuDimensions = svgDraw_default2.drawPopup( diagram25, actor, minMenuWidth, conf4, conf4.forceMenus, doc ); if (menuDimensions.height > maxHeight) { maxHeight = menuDimensions.height; } if (menuDimensions.width + actor.x > maxWidth) { maxWidth = menuDimensions.width + actor.x; } } return { maxHeight, maxWidth }; }, "drawActorsPopup"); setConf4 = /* @__PURE__ */ __name(function(cnf) { assignWithDepth_default(conf4, cnf); if (cnf.fontFamily) { conf4.actorFontFamily = conf4.noteFontFamily = conf4.messageFontFamily = cnf.fontFamily; } if (cnf.fontSize) { conf4.actorFontSize = conf4.noteFontSize = conf4.messageFontSize = cnf.fontSize; } if (cnf.fontWeight) { conf4.actorFontWeight = conf4.noteFontWeight = conf4.messageFontWeight = cnf.fontWeight; } }, "setConf"); actorActivations = /* @__PURE__ */ __name(function(actor) { return bounds.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, id28, _version, diagObj) { const { securityLevel, sequence } = getConfig2(); conf4 = sequence; let sandboxElement; if (securityLevel === "sandbox") { sandboxElement = select_default2("#i" + id28); } const root4 = securityLevel === "sandbox" ? select_default2(sandboxElement.nodes()[0].contentDocument.body) : select_default2("body"); const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document; bounds.init(); log.debug(diagObj.db); const diagram25 = securityLevel === "sandbox" ? root4.select(`[id="${id28}"]`) : select_default2(`[id="${id28}"]`); 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); conf4.height = await calculateActorMargins(actors2, maxMessageWidthPerActor, boxes); svgDraw_default2.insertComputerIcon(diagram25); svgDraw_default2.insertDatabaseIcon(diagram25); svgDraw_default2.insertClockIcon(diagram25); if (hasBoxes) { bounds.bumpVerticalPos(conf4.boxMargin); if (hasBoxTitles) { bounds.bumpVerticalPos(boxes[0].textMaxHeight); } } if (conf4.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)); } addActorRenderingData(diagram25, actors2, createdActors, actorKeys, 0, messages, false); const loopWidths = await calculateLoopBounds(messages, actors2, maxMessageWidthPerActor, diagObj); svgDraw_default2.insertArrowHead(diagram25); svgDraw_default2.insertArrowCrossHead(diagram25); svgDraw_default2.insertArrowFilledHead(diagram25); svgDraw_default2.insertSequenceNumber(diagram25); function activeEnd(msg, verticalPos) { const activationData = bounds.endActivation(msg); if (activationData.starty + 18 > verticalPos) { activationData.starty = verticalPos - 6; verticalPos += 12; } svgDraw_default2.drawActivation( diagram25, activationData, verticalPos, conf4, actorActivations(msg.from).length ); bounds.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: bounds.resetVerticalPos(); noteModel = msg.noteModel; await drawNote(diagram25, noteModel); break; case diagObj.db.LINETYPE.ACTIVE_START: bounds.newActivation(msg, diagram25, actors2); break; case diagObj.db.LINETYPE.ACTIVE_END: activeEnd(msg, bounds.getVerticalPos()); break; case diagObj.db.LINETYPE.LOOP_START: adjustLoopHeightForWrap( loopWidths, msg, conf4.boxMargin, conf4.boxMargin + conf4.boxTextMargin, (message) => bounds.newLoop(message) ); break; case diagObj.db.LINETYPE.LOOP_END: loopModel = bounds.endLoop(); await svgDraw_default2.drawLoop(diagram25, loopModel, "loop", conf4); bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); bounds.models.addLoop(loopModel); break; case diagObj.db.LINETYPE.RECT_START: adjustLoopHeightForWrap( loopWidths, msg, conf4.boxMargin, conf4.boxMargin, (message) => bounds.newLoop(void 0, message.message) ); break; case diagObj.db.LINETYPE.RECT_END: loopModel = bounds.endLoop(); backgrounds.push(loopModel); bounds.models.addLoop(loopModel); bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); break; case diagObj.db.LINETYPE.OPT_START: adjustLoopHeightForWrap( loopWidths, msg, conf4.boxMargin, conf4.boxMargin + conf4.boxTextMargin, (message) => bounds.newLoop(message) ); break; case diagObj.db.LINETYPE.OPT_END: loopModel = bounds.endLoop(); await svgDraw_default2.drawLoop(diagram25, loopModel, "opt", conf4); bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); bounds.models.addLoop(loopModel); break; case diagObj.db.LINETYPE.ALT_START: adjustLoopHeightForWrap( loopWidths, msg, conf4.boxMargin, conf4.boxMargin + conf4.boxTextMargin, (message) => bounds.newLoop(message) ); break; case diagObj.db.LINETYPE.ALT_ELSE: adjustLoopHeightForWrap( loopWidths, msg, conf4.boxMargin + conf4.boxTextMargin, conf4.boxMargin, (message) => bounds.addSectionToLoop(message) ); break; case diagObj.db.LINETYPE.ALT_END: loopModel = bounds.endLoop(); await svgDraw_default2.drawLoop(diagram25, loopModel, "alt", conf4); bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); bounds.models.addLoop(loopModel); break; case diagObj.db.LINETYPE.PAR_START: case diagObj.db.LINETYPE.PAR_OVER_START: adjustLoopHeightForWrap( loopWidths, msg, conf4.boxMargin, conf4.boxMargin + conf4.boxTextMargin, (message) => bounds.newLoop(message) ); bounds.saveVerticalPos(); break; case diagObj.db.LINETYPE.PAR_AND: adjustLoopHeightForWrap( loopWidths, msg, conf4.boxMargin + conf4.boxTextMargin, conf4.boxMargin, (message) => bounds.addSectionToLoop(message) ); break; case diagObj.db.LINETYPE.PAR_END: loopModel = bounds.endLoop(); await svgDraw_default2.drawLoop(diagram25, loopModel, "par", conf4); bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); bounds.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, conf4.boxMargin, conf4.boxMargin + conf4.boxTextMargin, (message) => bounds.newLoop(message) ); break; case diagObj.db.LINETYPE.CRITICAL_OPTION: adjustLoopHeightForWrap( loopWidths, msg, conf4.boxMargin + conf4.boxTextMargin, conf4.boxMargin, (message) => bounds.addSectionToLoop(message) ); break; case diagObj.db.LINETYPE.CRITICAL_END: loopModel = bounds.endLoop(); await svgDraw_default2.drawLoop(diagram25, loopModel, "critical", conf4); bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); bounds.models.addLoop(loopModel); break; case diagObj.db.LINETYPE.BREAK_START: adjustLoopHeightForWrap( loopWidths, msg, conf4.boxMargin, conf4.boxMargin + conf4.boxTextMargin, (message) => bounds.newLoop(message) ); break; case diagObj.db.LINETYPE.BREAK_END: loopModel = bounds.endLoop(); await svgDraw_default2.drawLoop(diagram25, loopModel, "break", conf4); bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); bounds.models.addLoop(loopModel); break; default: try { msgModel = msg.msgModel; msgModel.starty = bounds.getVerticalPos(); msgModel.sequenceIndex = sequenceIndex; msgModel.sequenceVisible = diagObj.db.showSequenceNumbers(); const lineStartY = await boundMessage(diagram25, msgModel); adjustCreatedDestroyedData( msg, msgModel, lineStartY, index, actors2, createdActors, destroyedActors ); messagesToDraw.push({ messageModel: msgModel, lineStartY }); bounds.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.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 = sequenceIndex + sequenceIndexStep; } index++; } log.debug("createdActors", createdActors); log.debug("destroyedActors", destroyedActors); await drawActors(diagram25, actors2, actorKeys, false); for (const e3 of messagesToDraw) { await drawMessage(diagram25, e3.messageModel, e3.lineStartY, diagObj); } if (conf4.mirrorActors) { await drawActors(diagram25, actors2, actorKeys, true); } backgrounds.forEach((e3) => svgDraw_default2.drawBackgroundRect(diagram25, e3)); fixLifeLineHeights(diagram25, actors2, actorKeys, conf4); for (const box2 of bounds.models.boxes) { box2.height = bounds.getVerticalPos() - box2.y; bounds.insert(box2.x, box2.y, box2.x + box2.width, box2.height); box2.startx = box2.x; box2.starty = box2.y; box2.stopx = box2.startx + box2.width; box2.stopy = box2.starty + box2.height; box2.stroke = "rgb(0,0,0, 0.5)"; svgDraw_default2.drawBox(diagram25, box2, conf4); } if (hasBoxes) { bounds.bumpVerticalPos(conf4.boxMargin); } const requiredBoxSize = drawActorsPopup(diagram25, actors2, actorKeys, doc); const { bounds: box } = bounds.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 * conf4.diagramMarginY; if (conf4.mirrorActors) { height2 = height2 - conf4.boxMargin + conf4.bottomMarginAdj; } let boxWidth = box.stopx - box.startx; if (boxWidth < requiredBoxSize.maxWidth) { boxWidth = requiredBoxSize.maxWidth; } const width3 = boxWidth + 2 * conf4.diagramMarginX; if (title2) { diagram25.append("text").text(title2).attr("x", (box.stopx - box.startx) / 2 - 2 * conf4.diagramMarginX).attr("y", -25); } configureSvgSize(diagram25, height2, width3, conf4.useMaxWidth); const extraVertForTitle = title2 ? 40 : 0; diagram25.attr( "viewBox", box.startx - conf4.diagramMarginX + " -" + (conf4.diagramMarginY + extraVertForTitle) + " " + width3 + " " + (height2 + extraVertForTitle) ); log.debug(`models:`, bounds.models); }, "draw"); __name(getMaxMessageWidthPerActor, "getMaxMessageWidthPerActor"); getRequiredPopupWidth = /* @__PURE__ */ __name(function(actor) { let requiredPopupWidth = 0; const textFont = actorFont(conf4); for (const key in actor.links) { const labelDimensions = utils_default2.calculateTextDimensions(key, textFont); const labelWidth = labelDimensions.width + 2 * conf4.wrapPadding + 2 * conf4.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, conf4.width, noteFont(conf4)) : msg.message, noteFont(conf4) ); const noteModel = { width: shouldWrap ? conf4.width : common_default.getMax(conf4.width, textDimensions.width + 2 * conf4.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(conf4.width, textDimensions.width) : common_default.getMax( fromActor.width / 2 + toActor.width / 2, textDimensions.width + 2 * conf4.noteMargin ); noteModel.startx = startx + (fromActor.width + conf4.actorMargin) / 2; } else if (msg.placement === diagObj.db.PLACEMENT.LEFTOF) { noteModel.width = shouldWrap ? common_default.getMax(conf4.width, textDimensions.width + 2 * conf4.noteMargin) : common_default.getMax( fromActor.width / 2 + toActor.width / 2, textDimensions.width + 2 * conf4.noteMargin ); noteModel.startx = startx - noteModel.width + (fromActor.width - conf4.actorMargin) / 2; } else if (msg.to === msg.from) { textDimensions = utils_default2.calculateTextDimensions( shouldWrap ? utils_default2.wrapLabel(msg.message, common_default.getMax(conf4.width, fromActor.width), noteFont(conf4)) : msg.message, noteFont(conf4) ); noteModel.width = shouldWrap ? common_default.getMax(conf4.width, fromActor.width) : common_default.getMax(fromActor.width, conf4.width, textDimensions.width + 2 * conf4.noteMargin); noteModel.startx = startx + (fromActor.width - noteModel.width) / 2; } else { noteModel.width = Math.abs(startx + fromActor.width / 2 - (stopx + toActor.width / 2)) + conf4.actorMargin; noteModel.startx = startx < stopx ? startx + fromActor.width / 2 - conf4.actorMargin / 2 : stopx + toActor.width / 2 - conf4.actorMargin / 2; } if (shouldWrap) { noteModel.message = utils_default2.wrapLabel( msg.message, noteModel.width - 2 * conf4.wrapPadding, noteFont(conf4) ); } log.debug( `NM:[${noteModel.startx},${noteModel.stopx},${noteModel.starty},${noteModel.stopy}:${noteModel.width},${noteModel.height}=${msg.message}]` ); return noteModel; }, "buildNoteModel"); buildMessageModel = /* @__PURE__ */ __name(function(msg, actors2, diagObj) { if (![ diagObj.db.LINETYPE.SOLID_OPEN, diagObj.db.LINETYPE.DOTTED_OPEN, diagObj.db.LINETYPE.SOLID, 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; 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(conf4.activationWidth / 2 - 1); } if (![diagObj.db.LINETYPE.SOLID_OPEN, diagObj.db.LINETYPE.DOTTED_OPEN].includes(msg.type)) { stopx += adjustValue(3); } if ([diagObj.db.LINETYPE.BIDIRECTIONAL_SOLID, diagObj.db.LINETYPE.BIDIRECTIONAL_DOTTED].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 * conf4.wrapPadding, conf4.width), messageFont2(conf4) ); } const msgDims = utils_default2.calculateTextDimensions(msg.message, messageFont2(conf4)); return { width: common_default.getMax( msg.wrap ? 0 : msgDims.width + 2 * conf4.wrapPadding, boundedWidth + 2 * conf4.wrapPadding, conf4.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) { msg.id = utils_default2.random({ length: 10 }); 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) * conf4.activationWidth / 2; const toAdd = { startx: x5, stopx: x5 + conf4.activationWidth, actor: msg.from, enabled: true }; bounds.activations.push(toAdd); } break; case diagObj.db.LINETYPE.ACTIVE_END: { const lastActorActivationIdx = bounds.activations.map((a2) => a2.actor).lastIndexOf(msg.from); bounds.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)) - conf4.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)) - conf4.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) - conf4.labelBoxWidth; } }); } } } bounds.activations = []; log.debug("Loop type widths:", loops); return loops; }, "calculateLoopBounds"); sequenceRenderer_default = { bounds, drawActors, drawActorsPopup, setConf: setConf4, draw: draw11 }; } }); // src/diagrams/sequence/sequenceDiagram.ts var sequenceDiagram_exports = {}; __export(sequenceDiagram_exports, { diagram: () => diagram11 }); var diagram11; var init_sequenceDiagram2 = __esm({ "src/diagrams/sequence/sequenceDiagram.ts"() { "use strict"; init_sequenceDiagram(); init_sequenceDb(); init_styles8(); init_sequenceRenderer(); diagram11 = { parser: sequenceDiagram_default, db: sequenceDb_default, renderer: sequenceRenderer_default, styles: styles_default8, init: /* @__PURE__ */ __name(({ wrap: wrap3 }) => { sequenceDb_default.setWrap(wrap3); }, "init") }; } }); // src/diagrams/class/parser/classDiagram.jison var parser13, classDiagram_default; var init_classDiagram = __esm({ "src/diagrams/class/parser/classDiagram.jison"() { "use strict"; parser13 = function() { var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l2) { for (o3 = o3 || {}, l2 = k2.length; l2--; o3[k2[l2]] = v3) ; return o3; }, "o"), $V0 = [1, 18], $V1 = [1, 19], $V2 = [1, 20], $V3 = [1, 41], $V4 = [1, 42], $V5 = [1, 26], $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, 76], $VA = [1, 8, 9, 12, 13, 22, 39, 41, 44, 66, 67, 68, 69, 70, 71, 72, 77, 79], $VB = [1, 8, 9, 12, 13, 17, 20, 22, 39, 41, 44, 48, 58, 66, 67, 68, 69, 70, 71, 72, 77, 79, 84, 99, 101, 102], $VC = [13, 58, 84, 99, 101, 102], $VD = [13, 58, 71, 72, 84, 99, 101, 102], $VE = [13, 58, 66, 67, 68, 69, 70, 84, 99, 101, 102], $VF = [1, 98], $VG = [1, 115], $VH = [1, 107], $VI = [1, 113], $VJ = [1, 108], $VK = [1, 109], $VL = [1, 110], $VM = [1, 111], $VN = [1, 112], $VO = [1, 114], $VP = [22, 58, 59, 80, 84, 85, 86, 87, 88, 89], $VQ = [1, 8, 9, 39, 41, 44], $VR = [1, 8, 9, 22], $VS = [1, 143], $VT = [1, 8, 9, 59], $VU = [1, 8, 9, 22, 58, 59, 80, 84, 85, 86, 87, 88, 89]; var parser23 = { 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, "DOT": 17, "className": 18, "classLiteralName": 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, "CLASS": 46, "ANNOTATION_START": 47, "ANNOTATION_END": 48, "MEMBER": 49, "SEPARATOR": 50, "relation": 51, "NOTE_FOR": 52, "noteText": 53, "NOTE": 54, "CLASSDEF": 55, "classList": 56, "stylesOpt": 57, "ALPHA": 58, "COMMA": 59, "direction_tb": 60, "direction_bt": 61, "direction_rl": 62, "direction_lr": 63, "relationType": 64, "lineType": 65, "AGGREGATION": 66, "EXTENSION": 67, "COMPOSITION": 68, "DEPENDENCY": 69, "LOLLIPOP": 70, "LINE": 71, "DOTTED_LINE": 72, "CALLBACK": 73, "LINK": 74, "LINK_TARGET": 75, "CLICK": 76, "CALLBACK_NAME": 77, "CALLBACK_ARGS": 78, "HREF": 79, "STYLE": 80, "CSSCLASS": 81, "style": 82, "styleComponent": 83, "NUM": 84, "COLON": 85, "UNIT": 86, "SPACE": 87, "BRKT": 88, "PCT": 89, "commentToken": 90, "textToken": 91, "graphCodeTokens": 92, "textNoTagsToken": 93, "TAGSTART": 94, "TAGEND": 95, "==": 96, "--": 97, "DEFAULT": 98, "MINUS": 99, "keywords": 100, "UNICODE_TEXT": 101, "BQUOTE_STR": 102, "$accept": 0, "$end": 1 }, terminals_: { 2: "error", 7: "CLASS_DIAGRAM", 8: "NEWLINE", 9: "EOF", 12: "SQS", 13: "STR", 14: "SQE", 17: "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: "CLASS", 47: "ANNOTATION_START", 48: "ANNOTATION_END", 49: "MEMBER", 50: "SEPARATOR", 52: "NOTE_FOR", 54: "NOTE", 55: "CLASSDEF", 58: "ALPHA", 59: "COMMA", 60: "direction_tb", 61: "direction_bt", 62: "direction_rl", 63: "direction_lr", 66: "AGGREGATION", 67: "EXTENSION", 68: "COMPOSITION", 69: "DEPENDENCY", 70: "LOLLIPOP", 71: "LINE", 72: "DOTTED_LINE", 73: "CALLBACK", 74: "LINK", 75: "LINK_TARGET", 76: "CLICK", 77: "CALLBACK_NAME", 78: "CALLBACK_ARGS", 79: "HREF", 80: "STYLE", 81: "CSSCLASS", 84: "NUM", 85: "COLON", 86: "UNIT", 87: "SPACE", 88: "BRKT", 89: "PCT", 92: "graphCodeTokens", 94: "TAGSTART", 95: "TAGEND", 96: "==", 97: "--", 98: "DEFAULT", 99: "MINUS", 100: "keywords", 101: "UNICODE_TEXT", 102: "BQUOTE_STR" }, productions_: [0, [3, 1], [3, 1], [4, 1], [6, 4], [5, 1], [5, 2], [5, 3], [11, 3], [15, 1], [15, 3], [15, 2], [18, 1], [18, 3], [18, 1], [18, 2], [18, 2], [18, 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], [40, 1], [40, 2], [40, 3], [24, 1], [24, 3], [24, 4], [24, 6], [43, 2], [43, 3], [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], [56, 1], [56, 3], [32, 1], [32, 1], [32, 1], [32, 1], [51, 3], [51, 2], [51, 2], [51, 1], [64, 1], [64, 1], [64, 1], [64, 1], [64, 1], [65, 1], [65, 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], [57, 1], [57, 3], [82, 1], [82, 2], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [90, 1], [90, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [93, 1], [93, 1], [93, 1], [93, 1], [16, 1], [16, 1], [16, 1], [16, 1], [19, 1], [53, 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 12: case 14: this.$ = $$[$0]; break; case 10: case 13: this.$ = $$[$0 - 2] + "." + $$[$0]; break; case 11: case 15: this.$ = $$[$0 - 1] + $$[$0]; break; case 16: case 17: this.$ = $$[$0 - 1] + "~" + $$[$0] + "~"; break; case 18: yy.addRelation($$[$0]); break; case 19: $$[$0 - 1].title = yy.cleanupLabel($$[$0]); yy.addRelation($$[$0 - 1]); break; case 30: this.$ = $$[$0].trim(); yy.setAccTitle(this.$); break; case 31: case 32: this.$ = $$[$0].trim(); yy.setAccDescription(this.$); break; case 33: yy.addClassesToNamespace($$[$0 - 3], $$[$0 - 1]); break; case 34: yy.addClassesToNamespace($$[$0 - 4], $$[$0 - 1]); break; case 35: this.$ = $$[$0]; yy.addNamespace($$[$0]); break; case 36: this.$ = [$$[$0]]; break; case 37: this.$ = [$$[$0 - 1]]; break; case 38: $$[$0].unshift($$[$0 - 2]); this.$ = $$[$0]; break; case 40: yy.setCssClass($$[$0 - 2], $$[$0]); break; case 41: yy.addMembers($$[$0 - 3], $$[$0 - 1]); break; case 42: yy.setCssClass($$[$0 - 5], $$[$0 - 3]); yy.addMembers($$[$0 - 5], $$[$0 - 1]); break; case 43: this.$ = $$[$0]; yy.addClass($$[$0]); break; case 44: this.$ = $$[$0 - 1]; yy.addClass($$[$0 - 1]); yy.setClassLabel($$[$0 - 1], $$[$0]); break; case 45: yy.addAnnotation($$[$0], $$[$0 - 2]); break; case 46: case 59: this.$ = [$$[$0]]; break; case 47: $$[$0].push($$[$0 - 1]); this.$ = $$[$0]; break; case 48: break; case 49: yy.addMember($$[$0 - 1], yy.cleanupLabel($$[$0])); break; case 50: break; case 51: break; case 52: this.$ = { "id1": $$[$0 - 2], "id2": $$[$0], relation: $$[$0 - 1], relationTitle1: "none", relationTitle2: "none" }; break; case 53: this.$ = { id1: $$[$0 - 3], id2: $$[$0], relation: $$[$0 - 1], relationTitle1: $$[$0 - 2], relationTitle2: "none" }; break; case 54: this.$ = { id1: $$[$0 - 3], id2: $$[$0], relation: $$[$0 - 2], relationTitle1: "none", relationTitle2: $$[$0 - 1] }; break; case 55: this.$ = { id1: $$[$0 - 4], id2: $$[$0], relation: $$[$0 - 2], relationTitle1: $$[$0 - 3], relationTitle2: $$[$0 - 1] }; break; case 56: yy.addNote($$[$0], $$[$0 - 1]); break; case 57: yy.addNote($$[$0]); break; case 58: this.$ = $$[$0 - 2]; yy.defineClass($$[$0 - 1], $$[$0]); break; case 60: this.$ = $$[$0 - 2].concat([$$[$0]]); break; case 61: yy.setDirection("TB"); break; case 62: yy.setDirection("BT"); break; case 63: yy.setDirection("RL"); break; case 64: yy.setDirection("LR"); break; case 65: this.$ = { type1: $$[$0 - 2], type2: $$[$0], lineType: $$[$0 - 1] }; break; case 66: this.$ = { type1: "none", type2: $$[$0], lineType: $$[$0 - 1] }; break; case 67: this.$ = { type1: $$[$0 - 1], type2: "none", lineType: $$[$0] }; break; case 68: this.$ = { type1: "none", type2: "none", lineType: $$[$0] }; break; case 69: this.$ = yy.relationType.AGGREGATION; break; case 70: this.$ = yy.relationType.EXTENSION; break; case 71: this.$ = yy.relationType.COMPOSITION; break; case 72: this.$ = yy.relationType.DEPENDENCY; break; case 73: this.$ = yy.relationType.LOLLIPOP; break; case 74: this.$ = yy.lineType.LINE; break; case 75: this.$ = yy.lineType.DOTTED_LINE; break; case 76: case 82: this.$ = $$[$0 - 2]; yy.setClickEvent($$[$0 - 1], $$[$0]); break; case 77: case 83: this.$ = $$[$0 - 3]; yy.setClickEvent($$[$0 - 2], $$[$0 - 1]); yy.setTooltip($$[$0 - 2], $$[$0]); break; case 78: this.$ = $$[$0 - 2]; yy.setLink($$[$0 - 1], $$[$0]); break; case 79: this.$ = $$[$0 - 3]; yy.setLink($$[$0 - 2], $$[$0 - 1], $$[$0]); break; case 80: this.$ = $$[$0 - 3]; yy.setLink($$[$0 - 2], $$[$0 - 1]); yy.setTooltip($$[$0 - 2], $$[$0]); break; case 81: this.$ = $$[$0 - 4]; yy.setLink($$[$0 - 3], $$[$0 - 2], $$[$0]); yy.setTooltip($$[$0 - 3], $$[$0 - 1]); break; case 84: this.$ = $$[$0 - 3]; yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]); break; case 85: this.$ = $$[$0 - 4]; yy.setClickEvent($$[$0 - 3], $$[$0 - 2], $$[$0 - 1]); yy.setTooltip($$[$0 - 3], $$[$0]); break; case 86: this.$ = $$[$0 - 3]; yy.setLink($$[$0 - 2], $$[$0]); break; case 87: this.$ = $$[$0 - 4]; yy.setLink($$[$0 - 3], $$[$0 - 1], $$[$0]); break; case 88: this.$ = $$[$0 - 4]; yy.setLink($$[$0 - 3], $$[$0 - 1]); yy.setTooltip($$[$0 - 3], $$[$0]); break; case 89: this.$ = $$[$0 - 5]; yy.setLink($$[$0 - 4], $$[$0 - 2], $$[$0]); yy.setTooltip($$[$0 - 4], $$[$0 - 1]); break; case 90: this.$ = $$[$0 - 2]; yy.setCssStyle($$[$0 - 1], $$[$0]); break; case 91: yy.setCssClass($$[$0 - 1], $$[$0]); break; case 92: this.$ = [$$[$0]]; break; case 93: $$[$0 - 2].push($$[$0]); this.$ = $$[$0 - 2]; break; case 95: this.$ = $$[$0 - 1] + $$[$0]; break; } }, "anonymous"), table: [{ 3: 1, 4: 2, 5: 3, 6: 4, 7: [1, 6], 10: 5, 16: 39, 18: 21, 19: 40, 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, 47: $V5, 49: $V6, 50: $V7, 52: $V8, 54: $V9, 55: $Va, 58: $Vb, 60: $Vc, 61: $Vd, 62: $Ve, 63: $Vf, 73: $Vg, 74: $Vh, 76: $Vi, 80: $Vj, 81: $Vk, 84: $Vl, 99: $Vm, 101: $Vn, 102: $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, 18], { 22: [1, 50] }), o2($Vq, [2, 20]), 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]), { 34: [1, 51] }, { 36: [1, 52] }, o2($Vq, [2, 32]), o2($Vq, [2, 48], { 51: 53, 64: 56, 65: 57, 13: [1, 54], 22: [1, 55], 66: $Vr, 67: $Vs, 68: $Vt, 69: $Vu, 70: $Vv, 71: $Vw, 72: $Vx }), { 39: [1, 65] }, o2($Vy, [2, 39], { 39: [1, 67], 44: [1, 66] }), o2($Vq, [2, 50]), o2($Vq, [2, 51]), { 16: 68, 58: $Vb, 84: $Vl, 99: $Vm, 101: $Vn }, { 16: 39, 18: 69, 19: 40, 58: $Vb, 84: $Vl, 99: $Vm, 101: $Vn, 102: $Vo }, { 16: 39, 18: 70, 19: 40, 58: $Vb, 84: $Vl, 99: $Vm, 101: $Vn, 102: $Vo }, { 16: 39, 18: 71, 19: 40, 58: $Vb, 84: $Vl, 99: $Vm, 101: $Vn, 102: $Vo }, { 58: [1, 72] }, { 13: [1, 73] }, { 16: 39, 18: 74, 19: 40, 58: $Vb, 84: $Vl, 99: $Vm, 101: $Vn, 102: $Vo }, { 13: $Vz, 53: 75 }, { 56: 77, 58: [1, 78] }, o2($Vq, [2, 61]), o2($Vq, [2, 62]), o2($Vq, [2, 63]), o2($Vq, [2, 64]), o2($VA, [2, 12], { 16: 39, 19: 40, 18: 80, 17: [1, 79], 20: [1, 81], 58: $Vb, 84: $Vl, 99: $Vm, 101: $Vn, 102: $Vo }), o2($VA, [2, 14], { 20: [1, 82] }), { 15: 83, 16: 84, 58: $Vb, 84: $Vl, 99: $Vm, 101: $Vn }, { 16: 39, 18: 85, 19: 40, 58: $Vb, 84: $Vl, 99: $Vm, 101: $Vn, 102: $Vo }, o2($VB, [2, 118]), o2($VB, [2, 119]), o2($VB, [2, 120]), o2($VB, [2, 121]), o2([1, 8, 9, 12, 13, 20, 22, 39, 41, 44, 66, 67, 68, 69, 70, 71, 72, 77, 79], [2, 122]), 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, 18: 21, 38: 22, 43: 23, 16: 39, 19: 40, 5: 86, 33: $V0, 35: $V1, 37: $V2, 42: $V3, 46: $V4, 47: $V5, 49: $V6, 50: $V7, 52: $V8, 54: $V9, 55: $Va, 58: $Vb, 60: $Vc, 61: $Vd, 62: $Ve, 63: $Vf, 73: $Vg, 74: $Vh, 76: $Vi, 80: $Vj, 81: $Vk, 84: $Vl, 99: $Vm, 101: $Vn, 102: $Vo }), { 5: 87, 10: 5, 16: 39, 18: 21, 19: 40, 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, 47: $V5, 49: $V6, 50: $V7, 52: $V8, 54: $V9, 55: $Va, 58: $Vb, 60: $Vc, 61: $Vd, 62: $Ve, 63: $Vf, 73: $Vg, 74: $Vh, 76: $Vi, 80: $Vj, 81: $Vk, 84: $Vl, 99: $Vm, 101: $Vn, 102: $Vo }, o2($Vq, [2, 19]), o2($Vq, [2, 30]), o2($Vq, [2, 31]), { 13: [1, 89], 16: 39, 18: 88, 19: 40, 58: $Vb, 84: $Vl, 99: $Vm, 101: $Vn, 102: $Vo }, { 51: 90, 64: 56, 65: 57, 66: $Vr, 67: $Vs, 68: $Vt, 69: $Vu, 70: $Vv, 71: $Vw, 72: $Vx }, o2($Vq, [2, 49]), { 65: 91, 71: $Vw, 72: $Vx }, o2($VC, [2, 68], { 64: 92, 66: $Vr, 67: $Vs, 68: $Vt, 69: $Vu, 70: $Vv }), o2($VD, [2, 69]), o2($VD, [2, 70]), o2($VD, [2, 71]), o2($VD, [2, 72]), o2($VD, [2, 73]), o2($VE, [2, 74]), o2($VE, [2, 75]), { 8: [1, 94], 24: 95, 40: 93, 43: 23, 46: $V4 }, { 16: 96, 58: $Vb, 84: $Vl, 99: $Vm, 101: $Vn }, { 45: 97, 49: $VF }, { 48: [1, 99] }, { 13: [1, 100] }, { 13: [1, 101] }, { 77: [1, 102], 79: [1, 103] }, { 22: $VG, 57: 104, 58: $VH, 80: $VI, 82: 105, 83: 106, 84: $VJ, 85: $VK, 86: $VL, 87: $VM, 88: $VN, 89: $VO }, { 58: [1, 116] }, { 13: $Vz, 53: 117 }, o2($Vq, [2, 57]), o2($Vq, [2, 123]), { 22: $VG, 57: 118, 58: $VH, 59: [1, 119], 80: $VI, 82: 105, 83: 106, 84: $VJ, 85: $VK, 86: $VL, 87: $VM, 88: $VN, 89: $VO }, o2($VP, [2, 59]), { 16: 39, 18: 120, 19: 40, 58: $Vb, 84: $Vl, 99: $Vm, 101: $Vn, 102: $Vo }, o2($VA, [2, 15]), o2($VA, [2, 16]), o2($VA, [2, 17]), { 39: [2, 35] }, { 15: 122, 16: 84, 17: [1, 121], 39: [2, 9], 58: $Vb, 84: $Vl, 99: $Vm, 101: $Vn }, o2($VQ, [2, 43], { 11: 123, 12: [1, 124] }), o2($Vp, [2, 7]), { 9: [1, 125] }, o2($VR, [2, 52]), { 16: 39, 18: 126, 19: 40, 58: $Vb, 84: $Vl, 99: $Vm, 101: $Vn, 102: $Vo }, { 13: [1, 128], 16: 39, 18: 127, 19: 40, 58: $Vb, 84: $Vl, 99: $Vm, 101: $Vn, 102: $Vo }, o2($VC, [2, 67], { 64: 129, 66: $Vr, 67: $Vs, 68: $Vt, 69: $Vu, 70: $Vv }), o2($VC, [2, 66]), { 41: [1, 130] }, { 24: 95, 40: 131, 43: 23, 46: $V4 }, { 8: [1, 132], 41: [2, 36] }, o2($Vy, [2, 40], { 39: [1, 133] }), { 41: [1, 134] }, { 41: [2, 46], 45: 135, 49: $VF }, { 16: 39, 18: 136, 19: 40, 58: $Vb, 84: $Vl, 99: $Vm, 101: $Vn, 102: $Vo }, o2($Vq, [2, 76], { 13: [1, 137] }), o2($Vq, [2, 78], { 13: [1, 139], 75: [1, 138] }), o2($Vq, [2, 82], { 13: [1, 140], 78: [1, 141] }), { 13: [1, 142] }, o2($Vq, [2, 90], { 59: $VS }), o2($VT, [2, 92], { 83: 144, 22: $VG, 58: $VH, 80: $VI, 84: $VJ, 85: $VK, 86: $VL, 87: $VM, 88: $VN, 89: $VO }), o2($VU, [2, 94]), o2($VU, [2, 96]), o2($VU, [2, 97]), o2($VU, [2, 98]), o2($VU, [2, 99]), o2($VU, [2, 100]), o2($VU, [2, 101]), o2($VU, [2, 102]), o2($VU, [2, 103]), o2($VU, [2, 104]), o2($Vq, [2, 91]), o2($Vq, [2, 56]), o2($Vq, [2, 58], { 59: $VS }), { 58: [1, 145] }, o2($VA, [2, 13]), { 15: 146, 16: 84, 58: $Vb, 84: $Vl, 99: $Vm, 101: $Vn }, { 39: [2, 11] }, o2($VQ, [2, 44]), { 13: [1, 147] }, { 1: [2, 4] }, o2($VR, [2, 54]), o2($VR, [2, 53]), { 16: 39, 18: 148, 19: 40, 58: $Vb, 84: $Vl, 99: $Vm, 101: $Vn, 102: $Vo }, o2($VC, [2, 65]), o2($Vq, [2, 33]), { 41: [1, 149] }, { 24: 95, 40: 150, 41: [2, 37], 43: 23, 46: $V4 }, { 45: 151, 49: $VF }, o2($Vy, [2, 41]), { 41: [2, 47] }, o2($Vq, [2, 45]), o2($Vq, [2, 77]), o2($Vq, [2, 79]), o2($Vq, [2, 80], { 75: [1, 152] }), o2($Vq, [2, 83]), o2($Vq, [2, 84], { 13: [1, 153] }), o2($Vq, [2, 86], { 13: [1, 155], 75: [1, 154] }), { 22: $VG, 58: $VH, 80: $VI, 82: 156, 83: 106, 84: $VJ, 85: $VK, 86: $VL, 87: $VM, 88: $VN, 89: $VO }, o2($VU, [2, 95]), o2($VP, [2, 60]), { 39: [2, 10] }, { 14: [1, 157] }, o2($VR, [2, 55]), o2($Vq, [2, 34]), { 41: [2, 38] }, { 41: [1, 158] }, o2($Vq, [2, 81]), o2($Vq, [2, 85]), o2($Vq, [2, 87]), o2($Vq, [2, 88], { 75: [1, 159] }), o2($VT, [2, 93], { 83: 144, 22: $VG, 58: $VH, 80: $VI, 84: $VJ, 85: $VK, 86: $VL, 87: $VM, 88: $VN, 89: $VO }), o2($VQ, [2, 8]), o2($Vy, [2, 42]), o2($Vq, [2, 89])], defaultActions: { 2: [2, 1], 3: [2, 2], 4: [2, 3], 83: [2, 35], 122: [2, 11], 125: [2, 4], 135: [2, 47], 146: [2, 10], 150: [2, 38] }, 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 parse8(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 lexer3 = 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]; } } lexer3.setInput(input, sharedState.yy); sharedState.yy.lexer = lexer3; sharedState.yy.parser = this; if (typeof lexer3.yylloc == "undefined") { lexer3.yylloc = {}; } var yyloc = lexer3.yylloc; lstack.push(yyloc); var ranges = lexer3.options && lexer3.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 lex2() { var token2; token2 = tstack.pop() || lexer3.lex() || EOF2; if (typeof token2 !== "number") { if (token2 instanceof Array) { tstack = token2; token2 = tstack.pop(); } token2 = self2.symbols_[token2] || token2; } return token2; } __name(lex2, "lex"); var symbol, preErrorSymbol, state5, action, a2, r2, yyval = {}, p3, len, newState2, expected; while (true) { state5 = stack[stack.length - 1]; if (this.defaultActions[state5]) { action = this.defaultActions[state5]; } else { if (symbol === null || typeof symbol == "undefined") { symbol = lex2(); } action = table[state5] && table[state5][symbol]; } if (typeof action === "undefined" || !action.length || !action[0]) { var errStr = ""; expected = []; for (p3 in table[state5]) { if (this.terminals_[p3] && p3 > TERROR) { expected.push("'" + this.terminals_[p3] + "'"); } } if (lexer3.showPosition) { errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer3.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: lexer3.match, token: this.terminals_[symbol] || symbol, line: lexer3.yylineno, loc: yyloc, expected }); } if (action[0] instanceof Array && action.length > 1) { throw new Error("Parse Error: multiple actions possible at state: " + state5 + ", token: " + symbol); } switch (action[0]) { case 1: stack.push(symbol); vstack.push(lexer3.yytext); lstack.push(lexer3.yylloc); stack.push(action[1]); symbol = null; if (!preErrorSymbol) { yyleng = lexer3.yyleng; yytext = lexer3.yytext; yylineno = lexer3.yylineno; yyloc = lexer3.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 lexer2 = /* @__PURE__ */ function() { var lexer3 = { 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(match2, 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 = match2[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 + match2[0].length }; this.yytext += match2[0]; this.match += match2[0]; this.matches = match2; 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(match2[0].length); this.matched += match2[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, match2, tempMatch, index; if (!this._more) { this.yytext = ""; this.match = ""; } var rules = this._currentRules(); for (var i2 = 0; i2 < rules.length; i2++) { tempMatch = this._input.match(this.rules[rules[i2]]); if (tempMatch && (!match2 || tempMatch[0].length > match2[0].length)) { match2 = tempMatch; index = i2; if (this.options.backtrack_lexer) { token2 = this.test_match(tempMatch, rules[i2]); if (token2 !== false) { return token2; } else if (this._backtrack) { match2 = false; continue; } else { return false; } } else if (!this.options.flex) { break; } } } if (match2) { token2 = this.test_match(match2, rules[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 lex2() { 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 60; break; case 1: return 61; break; case 2: return 62; break; case 3: return 63; 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 77; break; case 22: this.popState(); break; case 23: return 78; break; case 24: this.popState(); break; case 25: return "STR"; break; case 26: this.begin("string"); break; case 27: return 80; break; case 28: return 55; 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(); return 41; break; case 34: return "EOF_IN_STRUCT"; break; case 35: return 8; break; case 36: break; case 37: return "EDGE_STATE"; break; case 38: this.begin("class"); return 46; break; case 39: this.popState(); return 8; break; case 40: break; case 41: this.popState(); this.popState(); return 41; break; case 42: this.begin("class-body"); return 39; break; case 43: this.popState(); return 41; break; case 44: return "EOF_IN_STRUCT"; break; case 45: return "EDGE_STATE"; break; case 46: return "OPEN_IN_STRUCT"; break; case 47: break; case 48: return "MEMBER"; break; case 49: return 81; break; case 50: return 73; break; case 51: return 74; break; case 52: return 76; break; case 53: return 52; break; case 54: return 54; break; case 55: return 47; break; case 56: return 48; break; case 57: return 79; break; case 58: this.popState(); break; case 59: return "GENERICTYPE"; break; case 60: this.begin("generic"); break; case 61: this.popState(); break; case 62: return "BQUOTE_STR"; break; case 63: this.begin("bqstring"); break; case 64: return 75; break; case 65: return 75; break; case 66: return 75; break; case 67: return 75; break; case 68: return 67; break; case 69: return 67; break; case 70: return 69; break; case 71: return 69; break; case 72: return 68; break; case 73: return 66; break; case 74: return 70; break; case 75: return 71; break; case 76: return 72; break; case 77: return 22; break; case 78: return 44; break; case 79: return 99; break; case 80: return 17; break; case 81: return "PLUS"; break; case 82: return 85; break; case 83: return 59; break; case 84: return 88; break; case 85: return 88; break; case 86: return 89; break; case 87: return "EQUALS"; break; case 88: return "EQUALS"; break; case 89: return 58; break; case 90: return 12; break; case 91: return 14; break; case 92: return "PUNCTUATION"; break; case 93: return 84; break; case 94: return 101; break; case 95: return 87; break; case 96: return 87; break; case 97: 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, 33, 34, 35, 36, 37, 38, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], "inclusive": false }, "namespace": { "rules": [26, 29, 30, 31, 32, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], "inclusive": false }, "class-body": { "rules": [26, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], "inclusive": false }, "class": { "rules": [26, 39, 40, 41, 42, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], "inclusive": false }, "acc_descr_multiline": { "rules": [11, 12, 26, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], "inclusive": false }, "acc_descr": { "rules": [9, 26, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], "inclusive": false }, "acc_title": { "rules": [7, 26, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], "inclusive": false }, "callback_args": { "rules": [22, 23, 26, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], "inclusive": false }, "callback_name": { "rules": [19, 20, 21, 26, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], "inclusive": false }, "href": { "rules": [26, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], "inclusive": false }, "struct": { "rules": [26, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], "inclusive": false }, "generic": { "rules": [26, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], "inclusive": false }, "bqstring": { "rules": [26, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], "inclusive": false }, "string": { "rules": [24, 25, 26, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 6, 8, 10, 13, 14, 15, 16, 17, 18, 26, 27, 28, 29, 38, 49, 50, 51, 52, 53, 54, 55, 56, 57, 60, 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, 94, 95, 96, 97], "inclusive": true } } }; return lexer3; }(); parser23.lexer = lexer2; function Parser3() { this.yy = {}; } __name(Parser3, "Parser"); Parser3.prototype = parser23; parser23.Parser = Parser3; return new Parser3(); }(); parser13.parser = parser13; classDiagram_default = parser13; } }); // 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 match2 = methodRegEx.exec(input); if (match2) { const detectedVisibility = match2[1] ? match2[1].trim() : ""; if (visibilityValues.includes(detectedVisibility)) { this.visibility = detectedVisibility; } this.id = match2[2]; this.parameters = match2[3] ? match2[3].trim() : ""; potentialClassifier = match2[4] ? match2[4].trim() : ""; this.returnType = match2[5] ? match2[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("<", "<").replaceAll(">", ">"); if (this.text.startsWith("\\<")) { this.text = this.text.replace("\\<", "~"); } } parseClassifier() { switch (this.classifier) { case "*": return "font-style:italic;"; case "$": return "text-decoration:underline;"; default: return ""; } } }; } }); // src/diagrams/class/classDb.ts function 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; } var MERMAID_DOM_ID_PREFIX2, relations2, classes2, styleClasses, notes, interfaces, classCounter, namespaces, namespaceCounter, functions2, sanitizeText5, splitClassNameAndType, setClassLabel, addClass3, addInterface, lookUpDomId2, clear17, getClass, getClasses3, getRelations, getNotes, addRelation, addAnnotation, addMember, addMembers, addNote2, cleanupLabel, setCssClass, defineClass, setTooltip2, getTooltip2, setLink3, setClickEvent3, setClickFunc, bindFunctions3, lineType, relationType, setupToolTips2, direction2, getDirection3, setDirection3, addNamespace, getNamespace, getNamespaces, addClassesToNamespace, setCssStyle, getData2, classDb_default; var init_classDb = __esm({ "src/diagrams/class/classDb.ts"() { "use strict"; init_src32(); init_logger(); init_diagramAPI(); init_common(); init_utils2(); init_commonDb(); init_classTypes(); MERMAID_DOM_ID_PREFIX2 = "classId-"; relations2 = []; classes2 = /* @__PURE__ */ new Map(); styleClasses = /* @__PURE__ */ new Map(); notes = []; interfaces = []; classCounter = 0; namespaces = /* @__PURE__ */ new Map(); namespaceCounter = 0; functions2 = []; sanitizeText5 = /* @__PURE__ */ __name((txt) => common_default.sanitizeText(txt, getConfig2()), "sanitizeText"); splitClassNameAndType = /* @__PURE__ */ __name(function(_id) { const id28 = common_default.sanitizeText(_id, getConfig2()); let genericType = ""; let className = id28; if (id28.indexOf("~") > 0) { const split = id28.split("~"); className = sanitizeText5(split[0]); genericType = sanitizeText5(split[1]); } return { className, type: genericType }; }, "splitClassNameAndType"); setClassLabel = /* @__PURE__ */ __name(function(_id, label) { const id28 = common_default.sanitizeText(_id, getConfig2()); if (label) { label = sanitizeText5(label); } const { className } = splitClassNameAndType(id28); classes2.get(className).label = label; classes2.get(className).text = `${label}${classes2.get(className).type ? `<${classes2.get(className).type}>` : ""}`; }, "setClassLabel"); addClass3 = /* @__PURE__ */ __name(function(_id) { const id28 = common_default.sanitizeText(_id, getConfig2()); const { className, type: type3 } = splitClassNameAndType(id28); if (classes2.has(className)) { return; } const name = common_default.sanitizeText(className, getConfig2()); classes2.set(name, { id: name, type: type3, label: name, text: `${name}${type3 ? `<${type3}>` : ""}`, shape: "classBox", cssClasses: "default", methods: [], members: [], annotations: [], styles: [], domId: MERMAID_DOM_ID_PREFIX2 + name + "-" + classCounter }); classCounter++; }, "addClass"); addInterface = /* @__PURE__ */ __name(function(label, classId) { const classInterface = { id: `interface${interfaces.length}`, label, classId }; interfaces.push(classInterface); }, "addInterface"); lookUpDomId2 = /* @__PURE__ */ __name(function(_id) { const id28 = common_default.sanitizeText(_id, getConfig2()); if (classes2.has(id28)) { return classes2.get(id28).domId; } throw new Error("Class not found: " + id28); }, "lookUpDomId"); clear17 = /* @__PURE__ */ __name(function() { relations2 = []; classes2 = /* @__PURE__ */ new Map(); notes = []; interfaces = []; functions2 = []; functions2.push(setupToolTips2); namespaces = /* @__PURE__ */ new Map(); namespaceCounter = 0; direction2 = "TB"; clear(); }, "clear"); getClass = /* @__PURE__ */ __name(function(id28) { return classes2.get(id28); }, "getClass"); getClasses3 = /* @__PURE__ */ __name(function() { return classes2; }, "getClasses"); getRelations = /* @__PURE__ */ __name(function() { return relations2; }, "getRelations"); getNotes = /* @__PURE__ */ __name(function() { return notes; }, "getNotes"); addRelation = /* @__PURE__ */ __name(function(classRelation) { log.debug("Adding relation: " + JSON.stringify(classRelation)); const invalidTypes = [ relationType.LOLLIPOP, relationType.AGGREGATION, relationType.COMPOSITION, relationType.DEPENDENCY, relationType.EXTENSION ]; if (classRelation.relation.type1 === relationType.LOLLIPOP && !invalidTypes.includes(classRelation.relation.type2)) { addClass3(classRelation.id2); addInterface(classRelation.id1, classRelation.id2); classRelation.id1 = `interface${interfaces.length - 1}`; } else if (classRelation.relation.type2 === relationType.LOLLIPOP && !invalidTypes.includes(classRelation.relation.type1)) { addClass3(classRelation.id1); addInterface(classRelation.id2, classRelation.id1); classRelation.id2 = `interface${interfaces.length - 1}`; } else { addClass3(classRelation.id1); addClass3(classRelation.id2); } classRelation.id1 = splitClassNameAndType(classRelation.id1).className; classRelation.id2 = splitClassNameAndType(classRelation.id2).className; classRelation.relationTitle1 = common_default.sanitizeText( classRelation.relationTitle1.trim(), getConfig2() ); classRelation.relationTitle2 = common_default.sanitizeText( classRelation.relationTitle2.trim(), getConfig2() ); relations2.push(classRelation); }, "addRelation"); addAnnotation = /* @__PURE__ */ __name(function(className, annotation) { const validatedClassName = splitClassNameAndType(className).className; classes2.get(validatedClassName).annotations.push(annotation); }, "addAnnotation"); addMember = /* @__PURE__ */ __name(function(className, member) { addClass3(className); const validatedClassName = splitClassNameAndType(className).className; const theClass = classes2.get(validatedClassName); if (typeof member === "string") { const memberString = member.trim(); if (memberString.startsWith("<<") && memberString.endsWith(">>")) { theClass.annotations.push(sanitizeText5(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")); } } }, "addMember"); addMembers = /* @__PURE__ */ __name(function(className, members) { if (Array.isArray(members)) { members.reverse(); members.forEach((member) => addMember(className, member)); } }, "addMembers"); addNote2 = /* @__PURE__ */ __name(function(text3, className) { const note3 = { id: `note${notes.length}`, class: className, text: text3 }; notes.push(note3); }, "addNote"); cleanupLabel = /* @__PURE__ */ __name(function(label) { if (label.startsWith(":")) { label = label.substring(1); } return sanitizeText5(label.trim()); }, "cleanupLabel"); setCssClass = /* @__PURE__ */ __name(function(ids, className) { ids.split(",").forEach(function(_id) { let id28 = _id; if (/\d/.exec(_id[0])) { id28 = MERMAID_DOM_ID_PREFIX2 + id28; } const classNode = classes2.get(id28); if (classNode) { classNode.cssClasses += " " + className; } }); }, "setCssClass"); defineClass = /* @__PURE__ */ __name(function(ids, style3) { for (const id28 of ids) { let styleClass = styleClasses.get(id28); if (styleClass === void 0) { styleClass = { id: id28, styles: [], textStyles: [] }; styleClasses.set(id28, 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); }); } classes2.forEach((value2) => { if (value2.cssClasses.includes(id28)) { value2.styles.push(...style3.flatMap((s2) => s2.split(","))); } }); } }, "defineClass"); setTooltip2 = /* @__PURE__ */ __name(function(ids, tooltip) { ids.split(",").forEach(function(id28) { if (tooltip !== void 0) { classes2.get(id28).tooltip = sanitizeText5(tooltip); } }); }, "setTooltip"); getTooltip2 = /* @__PURE__ */ __name(function(id28, namespace) { if (namespace && namespaces.has(namespace)) { return namespaces.get(namespace).classes.get(id28).tooltip; } return classes2.get(id28).tooltip; }, "getTooltip"); setLink3 = /* @__PURE__ */ __name(function(ids, linkStr, target) { const config6 = getConfig2(); ids.split(",").forEach(function(_id) { let id28 = _id; if (/\d/.exec(_id[0])) { id28 = MERMAID_DOM_ID_PREFIX2 + id28; } const theClass = classes2.get(id28); if (theClass) { theClass.link = utils_default2.formatUrl(linkStr, config6); if (config6.securityLevel === "sandbox") { theClass.linkTarget = "_top"; } else if (typeof target === "string") { theClass.linkTarget = sanitizeText5(target); } else { theClass.linkTarget = "_blank"; } } }); setCssClass(ids, "clickable"); }, "setLink"); setClickEvent3 = /* @__PURE__ */ __name(function(ids, functionName, functionArgs) { ids.split(",").forEach(function(id28) { setClickFunc(id28, functionName, functionArgs); classes2.get(id28).haveCallback = true; }); setCssClass(ids, "clickable"); }, "setClickEvent"); setClickFunc = /* @__PURE__ */ __name(function(_domId, functionName, functionArgs) { const domId = common_default.sanitizeText(_domId, getConfig2()); const config6 = getConfig2(); if (config6.securityLevel !== "loose") { return; } if (functionName === void 0) { return; } const id28 = domId; if (classes2.has(id28)) { const elemId = lookUpDomId2(id28); 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(elemId); } functions2.push(function() { const elem = document.querySelector(`[id="${elemId}"]`); if (elem !== null) { elem.addEventListener( "click", function() { utils_default2.runFunc(functionName, ...argList); }, false ); } }); } }, "setClickFunc"); bindFunctions3 = /* @__PURE__ */ __name(function(element3) { functions2.forEach(function(fun) { fun(element3); }); }, "bindFunctions"); lineType = { LINE: 0, DOTTED_LINE: 1 }; relationType = { AGGREGATION: 0, EXTENSION: 1, COMPOSITION: 2, DEPENDENCY: 3, LOLLIPOP: 4 }; setupToolTips2 = /* @__PURE__ */ __name(function(element3) { let tooltipElem = select_default2(".mermaidTooltip"); if ((tooltipElem._groups || tooltipElem)[0][0] === null) { tooltipElem = select_default2("body").append("div").attr("class", "mermaidTooltip").style("opacity", 0); } const svg = select_default2(element3).select("svg"); const nodes7 = svg.selectAll("g.node"); nodes7.on("mouseover", function() { const el = select_default2(this); const title2 = el.attr("title"); if (title2 === null) { return; } const rect3 = this.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.top - 14 + document.body.scrollTop + "px"); tooltipElem.html(tooltipElem.html().replace(/<br\/>/g, "
    ")); el.classed("hover", true); }).on("mouseout", function() { tooltipElem.transition().duration(500).style("opacity", 0); const el = select_default2(this); el.classed("hover", false); }); }, "setupToolTips"); functions2.push(setupToolTips2); direction2 = "TB"; getDirection3 = /* @__PURE__ */ __name(() => direction2, "getDirection"); setDirection3 = /* @__PURE__ */ __name((dir2) => { direction2 = dir2; }, "setDirection"); addNamespace = /* @__PURE__ */ __name(function(id28) { if (namespaces.has(id28)) { return; } namespaces.set(id28, { id: id28, classes: /* @__PURE__ */ new Map(), children: {}, domId: MERMAID_DOM_ID_PREFIX2 + id28 + "-" + namespaceCounter }); namespaceCounter++; }, "addNamespace"); getNamespace = /* @__PURE__ */ __name(function(name) { return namespaces.get(name); }, "getNamespace"); getNamespaces = /* @__PURE__ */ __name(function() { return namespaces; }, "getNamespaces"); addClassesToNamespace = /* @__PURE__ */ __name(function(id28, classNames) { if (!namespaces.has(id28)) { return; } for (const name of classNames) { const { className } = splitClassNameAndType(name); classes2.get(className).parent = id28; namespaces.get(id28).classes.set(className, classes2.get(className)); } }, "addClassesToNamespace"); setCssStyle = /* @__PURE__ */ __name(function(id28, styles3) { const thisClass = classes2.get(id28); if (!styles3 || !thisClass) { return; } for (const s2 of styles3) { if (s2.includes(",")) { thisClass.styles.push(...s2.split(",")); } else { thisClass.styles.push(s2); } } }, "setCssStyle"); __name(getArrowMarker, "getArrowMarker"); getData2 = /* @__PURE__ */ __name(() => { const nodes7 = []; const edges5 = []; const config6 = getConfig2(); for (const namespaceKey of namespaces.keys()) { const namespace = namespaces.get(namespaceKey); if (namespace) { const node2 = { id: namespace.id, label: namespace.id, isGroup: true, padding: config6.class.padding ?? 16, // parent node must be one of [rect, roundedWithTitle, noteGroup, divider] shape: "rect", cssStyles: ["fill: none", "stroke: black"], look: config6.look }; nodes7.push(node2); } } for (const classKey of classes2.keys()) { const classNode = classes2.get(classKey); if (classNode) { const node2 = classNode; node2.parentId = classNode.parent; node2.look = config6.look; nodes7.push(node2); } } let cnt5 = 0; for (const note3 of notes) { cnt5++; const noteNode = { id: note3.id, label: note3.text, isGroup: false, shape: "note", padding: config6.class.padding ?? 6, cssStyles: [ "text-align: left", "white-space: nowrap", `fill: ${config6.themeVariables.noteBkgColor}`, `stroke: ${config6.themeVariables.noteBorderColor}` ], look: config6.look }; nodes7.push(noteNode); const noteClassId = classes2.get(note3.class)?.id ?? ""; if (noteClassId) { const edge = { id: `edgeNote${cnt5}`, start: note3.id, end: noteClassId, type: "normal", thickness: "normal", classes: "relation", arrowTypeStart: "none", arrowTypeEnd: "none", arrowheadStyle: "", labelStyle: [""], style: ["fill: none"], pattern: "dotted", look: config6.look }; edges5.push(edge); } } for (const _interface of interfaces) { const interfaceNode = { id: _interface.id, label: _interface.label, isGroup: false, shape: "rect", cssStyles: ["opacity: 0;"], look: config6.look }; nodes7.push(interfaceNode); } cnt5 = 0; for (const classRelation of relations2) { cnt5++; const edge = { id: getEdgeId(classRelation.id1, classRelation.id2, { prefix: "id", counter: cnt5 }), start: classRelation.id1, end: classRelation.id2, type: "normal", label: classRelation.title, labelpos: "c", thickness: "normal", classes: "relation", arrowTypeStart: getArrowMarker(classRelation.relation.type1), arrowTypeEnd: 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: config6.look }; edges5.push(edge); } return { nodes: nodes7, edges: edges5, other: {}, config: config6, direction: getDirection3() }; }, "getData"); classDb_default = { setAccTitle, getAccTitle, getAccDescription, setAccDescription, getConfig: /* @__PURE__ */ __name(() => getConfig2().class, "getConfig"), addClass: addClass3, bindFunctions: bindFunctions3, clear: clear17, getClass, getClasses: getClasses3, getNotes, addAnnotation, addNote: addNote2, getRelations, addRelation, getDirection: getDirection3, setDirection: setDirection3, addMember, addMembers, cleanupLabel, lineType, relationType, setClickEvent: setClickEvent3, setCssClass, defineClass, setLink: setLink3, getTooltip: getTooltip2, setTooltip: setTooltip2, lookUpDomId: lookUpDomId2, setDiagramTitle, getDiagramTitle, setClassLabel, addNamespace, addClassesToNamespace, getNamespace, getNamespaces, setCssStyle, getData: getData2 }; } }); // src/diagrams/class/styles.js var getStyles10, styles_default9; var init_styles9 = __esm({ "src/diagrams/class/styles.js"() { "use strict"; getStyles10 = /* @__PURE__ */ __name((options3) => `g.classGroup text { fill: ${options3.nodeBorder || options3.classText}; stroke: none; font-family: ${options3.fontFamily}; font-size: 10px; .title { font-weight: bolder; } } .nodeLabel, .edgeLabel { color: ${options3.classText}; } .edgeLabel .label rect { fill: ${options3.mainBkg}; } .label text { fill: ${options3.classText}; } .labelBkg { background: ${options3.mainBkg}; } .edgeLabel .label span { background: ${options3.mainBkg}; } .classTitle { font-weight: bolder; } .node rect, .node circle, .node ellipse, .node polygon, .node path { fill: ${options3.mainBkg}; stroke: ${options3.nodeBorder}; stroke-width: 1px; } .divider { stroke: ${options3.nodeBorder}; stroke-width: 1; } g.clickable { cursor: pointer; } g.classGroup rect { fill: ${options3.mainBkg}; stroke: ${options3.nodeBorder}; } g.classGroup line { stroke: ${options3.nodeBorder}; stroke-width: 1; } .classLabel .box { stroke: none; stroke-width: 0; fill: ${options3.mainBkg}; opacity: 0.5; } .classLabel .label { fill: ${options3.nodeBorder}; font-size: 10px; } .relation { stroke: ${options3.lineColor}; stroke-width: 1; fill: none; } .dashed-line{ stroke-dasharray: 3; } .dotted-line{ stroke-dasharray: 1 2; } #compositionStart, .composition { fill: ${options3.lineColor} !important; stroke: ${options3.lineColor} !important; stroke-width: 1; } #compositionEnd, .composition { fill: ${options3.lineColor} !important; stroke: ${options3.lineColor} !important; stroke-width: 1; } #dependencyStart, .dependency { fill: ${options3.lineColor} !important; stroke: ${options3.lineColor} !important; stroke-width: 1; } #dependencyStart, .dependency { fill: ${options3.lineColor} !important; stroke: ${options3.lineColor} !important; stroke-width: 1; } #extensionStart, .extension { fill: transparent !important; stroke: ${options3.lineColor} !important; stroke-width: 1; } #extensionEnd, .extension { fill: transparent !important; stroke: ${options3.lineColor} !important; stroke-width: 1; } #aggregationStart, .aggregation { fill: transparent !important; stroke: ${options3.lineColor} !important; stroke-width: 1; } #aggregationEnd, .aggregation { fill: transparent !important; stroke: ${options3.lineColor} !important; stroke-width: 1; } #lollipopStart, .lollipop { fill: ${options3.mainBkg} !important; stroke: ${options3.lineColor} !important; stroke-width: 1; } #lollipopEnd, .lollipop { fill: ${options3.mainBkg} !important; stroke: ${options3.lineColor} !important; stroke-width: 1; } .edgeTerminals { font-size: 11px; line-height: initial; } .classTitleText { text-anchor: middle; font-size: 18px; fill: ${options3.textColor}; } `, "getStyles"); styles_default9 = getStyles10; } }); // src/diagrams/class/classRenderer-v3-unified.ts var getDir, getClasses4, 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_render(); 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"); getClasses4 = /* @__PURE__ */ __name(function(text3, diagramObj) { return diagramObj.db.getClasses(); }, "getClasses"); draw12 = /* @__PURE__ */ __name(async function(text3, id28, _version, diag) { log.info("REF0:"); log.info("Drawing class diagram (v3)", id28); const { securityLevel, state: conf7, layout: layout6 } = getConfig2(); const data4Layout = diag.db.getData(); const svg = getDiagramElement(id28, securityLevel); data4Layout.type = diag.type; data4Layout.layoutAlgorithm = getRegisteredLayoutAlgorithm(layout6); data4Layout.nodeSpacing = conf7?.nodeSpacing || 50; data4Layout.rankSpacing = conf7?.rankSpacing || 50; data4Layout.markers = ["aggregation", "extension", "composition", "dependency", "lollipop"]; data4Layout.diagramId = id28; await render4(data4Layout, svg); const padding2 = 8; utils_default2.insertTitle( svg, "classDiagramTitleText", conf7?.titleTopMargin ?? 25, diag.db.getDiagramTitle() ); setupViewPortForSVG(svg, padding2, "classDiagram", conf7?.useMaxWidth ?? true); }, "draw"); classRenderer_v3_unified_default = { getClasses: getClasses4, draw: draw12, getDir }; } }); // src/diagrams/class/classDiagram.ts var classDiagram_exports = {}; __export(classDiagram_exports, { diagram: () => diagram12 }); var diagram12; var init_classDiagram2 = __esm({ "src/diagrams/class/classDiagram.ts"() { "use strict"; init_classDiagram(); init_classDb(); init_styles9(); init_classRenderer_v3_unified(); diagram12 = { parser: classDiagram_default, db: classDb_default, renderer: classRenderer_v3_unified_default, styles: styles_default9, init: /* @__PURE__ */ __name((cnf) => { if (!cnf.class) { cnf.class = {}; } cnf.class.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; classDb_default.clear(); }, "init") }; } }); // src/diagrams/class/classDiagram-v2.ts var classDiagram_v2_exports = {}; __export(classDiagram_v2_exports, { diagram: () => diagram13 }); var diagram13; var init_classDiagram_v2 = __esm({ "src/diagrams/class/classDiagram-v2.ts"() { "use strict"; init_classDiagram(); init_classDb(); init_styles9(); init_classRenderer_v3_unified(); diagram13 = { parser: classDiagram_default, db: classDb_default, renderer: classRenderer_v3_unified_default, styles: styles_default9, init: /* @__PURE__ */ __name((cnf) => { if (!cnf.class) { cnf.class = {}; } cnf.class.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; classDb_default.clear(); }, "init") }; } }); // src/diagrams/state/parser/stateDiagram.jison var parser14, stateDiagram_default; var init_stateDiagram = __esm({ "src/diagrams/state/parser/stateDiagram.jison"() { "use strict"; parser14 = function() { var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l2) { for (o3 = o3 || {}, l2 = k2.length; l2--; o3[k2[l2]] = 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, 32], $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, 34], $Vn = [1, 35], $Vo = [1, 36], $Vp = [1, 37], $Vq = [1, 33], $Vr = [1, 4, 5, 16, 17, 19, 21, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 42, 45, 48, 49, 50, 51, 54], $Vs = [1, 4, 5, 14, 15, 16, 17, 19, 21, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 42, 45, 48, 49, 50, 51, 54], $Vt = [4, 5, 16, 17, 19, 21, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 42, 45, 48, 49, 50, 51, 54]; var parser23 = { 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, "classDef": 38, "CLASSDEF_ID": 39, "CLASSDEF_STYLEOPTS": 40, "DEFAULT": 41, "style": 42, "STYLE_IDS": 43, "STYLEDEF_STYLEOPTS": 44, "class": 45, "CLASSENTITY_IDS": 46, "STYLECLASS": 47, "direction_tb": 48, "direction_bt": 49, "direction_rl": 50, "direction_lr": 51, "eol": 52, ";": 53, "EDGE_STATE": 54, "STYLE_SEPARATOR": 55, "left_of": 56, "right_of": 57, "$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: "classDef", 39: "CLASSDEF_ID", 40: "CLASSDEF_STYLEOPTS", 41: "DEFAULT", 42: "style", 43: "STYLE_IDS", 44: "STYLEDEF_STYLEOPTS", 45: "class", 46: "CLASSENTITY_IDS", 47: "STYLECLASS", 48: "direction_tb", 49: "direction_bt", 50: "direction_rl", 51: "direction_lr", 53: ";", 54: "EDGE_STATE", 55: "STYLE_SEPARATOR", 56: "left_of", 57: "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], [10, 3], [10, 3], [11, 3], [12, 3], [32, 1], [32, 1], [32, 1], [32, 1], [52, 1], [52, 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 id28 = $$[$0]; var description = $$[$0 - 2].trim(); if ($$[$0].match(":")) { var parts = $$[$0].split(":"); id28 = parts[0]; description = [description, parts[1]]; } this.$ = { stmt: "state", id: id28, 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: case 33: this.$ = { stmt: "classDef", id: $$[$0 - 1].trim(), classes: $$[$0].trim() }; break; case 34: this.$ = { stmt: "style", id: $$[$0 - 1].trim(), styleClass: $$[$0].trim() }; break; case 35: this.$ = { stmt: "applyClass", id: $$[$0 - 1].trim(), styleClass: $$[$0].trim() }; break; case 36: yy.setDirection("TB"); this.$ = { stmt: "dir", value: "TB" }; break; case 37: yy.setDirection("BT"); this.$ = { stmt: "dir", value: "BT" }; break; case 38: yy.setDirection("RL"); this.$ = { stmt: "dir", value: "RL" }; break; case 39: yy.setDirection("LR"); this.$ = { stmt: "dir", value: "LR" }; break; case 42: case 43: this.$ = { stmt: "state", id: $$[$0].trim(), type: "default", description: "" }; break; case 44: this.$ = { stmt: "state", id: $$[$0 - 2].trim(), classes: [$$[$0].trim()], type: "default", description: "" }; break; case 45: 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, 42, 45, 48, 49, 50, 51, 54], $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, 42: $Vk, 45: $Vl, 48: $Vm, 49: $Vn, 50: $Vo, 51: $Vp, 54: $Vq }, o2($Vr, [2, 5]), { 9: 38, 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, 42: $Vk, 45: $Vl, 48: $Vm, 49: $Vn, 50: $Vo, 51: $Vp, 54: $Vq }, o2($Vr, [2, 7]), o2($Vr, [2, 8]), o2($Vr, [2, 9]), o2($Vr, [2, 10]), o2($Vr, [2, 11]), o2($Vr, [2, 12], { 14: [1, 39], 15: [1, 40] }), o2($Vr, [2, 16]), { 18: [1, 41] }, o2($Vr, [2, 18], { 20: [1, 42] }), { 23: [1, 43] }, o2($Vr, [2, 22]), o2($Vr, [2, 23]), o2($Vr, [2, 24]), o2($Vr, [2, 25]), { 30: 44, 31: [1, 45], 56: [1, 46], 57: [1, 47] }, o2($Vr, [2, 28]), { 34: [1, 48] }, { 36: [1, 49] }, o2($Vr, [2, 31]), { 39: [1, 50], 41: [1, 51] }, { 43: [1, 52] }, { 46: [1, 53] }, o2($Vs, [2, 42], { 55: [1, 54] }), o2($Vs, [2, 43], { 55: [1, 55] }), o2($Vr, [2, 36]), o2($Vr, [2, 37]), o2($Vr, [2, 38]), o2($Vr, [2, 39]), o2($Vr, [2, 6]), o2($Vr, [2, 13]), { 13: 56, 24: $Va, 54: $Vq }, o2($Vr, [2, 17]), o2($Vt, $V3, { 7: 57 }), { 24: [1, 58] }, { 24: [1, 59] }, { 23: [1, 60] }, { 24: [2, 46] }, { 24: [2, 47] }, o2($Vr, [2, 29]), o2($Vr, [2, 30]), { 40: [1, 61] }, { 40: [1, 62] }, { 44: [1, 63] }, { 47: [1, 64] }, { 24: [1, 65] }, { 24: [1, 66] }, o2($Vr, [2, 14], { 14: [1, 67] }), { 4: $V4, 5: $V5, 8: 8, 9: 10, 10: 12, 11: 13, 12: 14, 13: 15, 16: $V6, 17: $V7, 19: $V8, 21: [1, 68], 22: $V9, 24: $Va, 25: $Vb, 26: $Vc, 27: $Vd, 28: $Ve, 29: $Vf, 32: 25, 33: $Vg, 35: $Vh, 37: $Vi, 38: $Vj, 42: $Vk, 45: $Vl, 48: $Vm, 49: $Vn, 50: $Vo, 51: $Vp, 54: $Vq }, o2($Vr, [2, 20], { 20: [1, 69] }), { 31: [1, 70] }, { 24: [1, 71] }, o2($Vr, [2, 32]), o2($Vr, [2, 33]), o2($Vr, [2, 34]), o2($Vr, [2, 35]), o2($Vs, [2, 44]), o2($Vs, [2, 45]), o2($Vr, [2, 15]), o2($Vr, [2, 19]), o2($Vt, $V3, { 7: 72 }), o2($Vr, [2, 26]), o2($Vr, [2, 27]), { 4: $V4, 5: $V5, 8: 8, 9: 10, 10: 12, 11: 13, 12: 14, 13: 15, 16: $V6, 17: $V7, 19: $V8, 21: [1, 73], 22: $V9, 24: $Va, 25: $Vb, 26: $Vc, 27: $Vd, 28: $Ve, 29: $Vf, 32: 25, 33: $Vg, 35: $Vh, 37: $Vi, 38: $Vj, 42: $Vk, 45: $Vl, 48: $Vm, 49: $Vn, 50: $Vo, 51: $Vp, 54: $Vq }, o2($Vr, [2, 21])], defaultActions: { 5: [2, 1], 6: [2, 2], 46: [2, 46], 47: [2, 47] }, 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 parse8(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 lexer3 = 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]; } } lexer3.setInput(input, sharedState.yy); sharedState.yy.lexer = lexer3; sharedState.yy.parser = this; if (typeof lexer3.yylloc == "undefined") { lexer3.yylloc = {}; } var yyloc = lexer3.yylloc; lstack.push(yyloc); var ranges = lexer3.options && lexer3.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 lex2() { var token2; token2 = tstack.pop() || lexer3.lex() || EOF2; if (typeof token2 !== "number") { if (token2 instanceof Array) { tstack = token2; token2 = tstack.pop(); } token2 = self2.symbols_[token2] || token2; } return token2; } __name(lex2, "lex"); var symbol, preErrorSymbol, state5, action, a2, r2, yyval = {}, p3, len, newState2, expected; while (true) { state5 = stack[stack.length - 1]; if (this.defaultActions[state5]) { action = this.defaultActions[state5]; } else { if (symbol === null || typeof symbol == "undefined") { symbol = lex2(); } action = table[state5] && table[state5][symbol]; } if (typeof action === "undefined" || !action.length || !action[0]) { var errStr = ""; expected = []; for (p3 in table[state5]) { if (this.terminals_[p3] && p3 > TERROR) { expected.push("'" + this.terminals_[p3] + "'"); } } if (lexer3.showPosition) { errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer3.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: lexer3.match, token: this.terminals_[symbol] || symbol, line: lexer3.yylineno, loc: yyloc, expected }); } if (action[0] instanceof Array && action.length > 1) { throw new Error("Parse Error: multiple actions possible at state: " + state5 + ", token: " + symbol); } switch (action[0]) { case 1: stack.push(symbol); vstack.push(lexer3.yytext); lstack.push(lexer3.yylloc); stack.push(action[1]); symbol = null; if (!preErrorSymbol) { yyleng = lexer3.yyleng; yytext = lexer3.yytext; yylineno = lexer3.yylineno; yyloc = lexer3.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 lexer2 = /* @__PURE__ */ function() { var lexer3 = { 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(match2, 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 = match2[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 + match2[0].length }; this.yytext += match2[0]; this.match += match2[0]; this.matches = match2; 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(match2[0].length); this.matched += match2[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, match2, tempMatch, index; if (!this._more) { this.yytext = ""; this.match = ""; } var rules = this._currentRules(); for (var i2 = 0; i2 < rules.length; i2++) { tempMatch = this._input.match(this.rules[rules[i2]]); if (tempMatch && (!match2 || tempMatch[0].length > match2[0].length)) { match2 = tempMatch; index = i2; if (this.options.backtrack_lexer) { token2 = this.test_match(tempMatch, rules[i2]); if (token2 !== false) { return token2; } else if (this._backtrack) { match2 = false; continue; } else { return false; } } else if (!this.options.flex) { break; } } } if (match2) { token2 = this.test_match(match2, rules[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 lex2() { 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 41; break; case 1: return 48; break; case 2: return 49; break; case 3: return 50; break; case 4: return 51; break; case 5: break; case 6: { } break; case 7: return 5; break; case 8: break; case 9: break; case 10: break; case 11: break; case 12: this.pushState("SCALE"); return 17; break; case 13: return 18; break; case 14: this.popState(); break; case 15: this.begin("acc_title"); return 33; break; case 16: this.popState(); return "acc_title_value"; break; case 17: this.begin("acc_descr"); return 35; break; case 18: this.popState(); return "acc_descr_value"; break; case 19: this.begin("acc_descr_multiline"); break; case 20: this.popState(); break; case 21: return "acc_descr_multiline_value"; break; case 22: this.pushState("CLASSDEF"); return 38; break; case 23: this.popState(); this.pushState("CLASSDEFID"); return "DEFAULT_CLASSDEF_ID"; break; case 24: this.popState(); this.pushState("CLASSDEFID"); return 39; break; case 25: this.popState(); return 40; break; case 26: this.pushState("CLASS"); return 45; break; case 27: this.popState(); this.pushState("CLASS_STYLE"); return 46; break; case 28: this.popState(); return 47; break; case 29: this.pushState("STYLE"); return 42; break; case 30: this.popState(); this.pushState("STYLEDEF_STYLES"); return 43; break; case 31: this.popState(); return 44; break; case 32: this.pushState("SCALE"); return 17; break; case 33: return 18; break; case 34: this.popState(); break; case 35: this.pushState("STATE"); break; case 36: this.popState(); yy_.yytext = yy_.yytext.slice(0, -8).trim(); return 25; break; case 37: this.popState(); yy_.yytext = yy_.yytext.slice(0, -8).trim(); return 26; break; case 38: this.popState(); yy_.yytext = yy_.yytext.slice(0, -10).trim(); return 27; break; case 39: this.popState(); yy_.yytext = yy_.yytext.slice(0, -8).trim(); return 25; break; case 40: this.popState(); yy_.yytext = yy_.yytext.slice(0, -8).trim(); return 26; break; case 41: this.popState(); yy_.yytext = yy_.yytext.slice(0, -10).trim(); return 27; break; case 42: return 48; break; case 43: return 49; break; case 44: return 50; break; case 45: return 51; break; case 46: this.pushState("STATE_STRING"); break; case 47: this.pushState("STATE_ID"); return "AS"; break; case 48: this.popState(); return "ID"; break; case 49: this.popState(); break; case 50: return "STATE_DESCR"; break; case 51: return 19; break; case 52: this.popState(); break; case 53: this.popState(); this.pushState("struct"); return 20; break; case 54: break; case 55: this.popState(); return 21; break; case 56: break; case 57: this.begin("NOTE"); return 29; break; case 58: this.popState(); this.pushState("NOTE_ID"); return 56; break; case 59: this.popState(); this.pushState("NOTE_ID"); return 57; break; case 60: this.popState(); this.pushState("FLOATING_NOTE"); break; case 61: this.popState(); this.pushState("FLOATING_NOTE_ID"); return "AS"; break; case 62: break; case 63: return "NOTE_TEXT"; break; case 64: this.popState(); return "ID"; break; case 65: this.popState(); this.pushState("NOTE_TEXT"); return 24; break; case 66: this.popState(); yy_.yytext = yy_.yytext.substr(2).trim(); return 31; break; case 67: this.popState(); yy_.yytext = yy_.yytext.slice(0, -8).trim(); return 31; break; case 68: return 6; break; case 69: return 6; break; case 70: return 16; break; case 71: return 54; break; case 72: return 24; break; case 73: yy_.yytext = yy_.yytext.trim(); return 14; break; case 74: return 15; break; case 75: return 28; break; case 76: return 55; break; case 77: return 5; break; case 78: return "INVALID"; break; } }, "anonymous"), rules: [/^(?: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, /^(?:[^\}]%%[^\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, /^(?:.*<>)/i, /^(?:.*<>)/i, /^(?:.*<>)/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, /^(?:[^\n\s\{]+)/i, /^(?:\n)/i, /^(?:\{)/i, /^(?:%%(?!\{)[^\n]*)/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]*?end note\b)/i, /^(?:stateDiagram\s+)/i, /^(?:stateDiagram-v2\s+)/i, /^(?:hide empty description\b)/i, /^(?:\[\*\])/i, /^(?:[^:\n\s\-\{]+)/i, /^(?:\s*:[^:\n;]+)/i, /^(?:-->)/i, /^(?:--)/i, /^(?::::)/i, /^(?:$)/i, /^(?:.)/i], conditions: { "LINE": { "rules": [9, 10], "inclusive": false }, "struct": { "rules": [9, 10, 22, 26, 29, 35, 42, 43, 44, 45, 54, 55, 56, 57, 71, 72, 73, 74, 75], "inclusive": false }, "FLOATING_NOTE_ID": { "rules": [64], "inclusive": false }, "FLOATING_NOTE": { "rules": [61, 62, 63], "inclusive": false }, "NOTE_TEXT": { "rules": [66, 67], "inclusive": false }, "NOTE_ID": { "rules": [65], "inclusive": false }, "NOTE": { "rules": [58, 59, 60], "inclusive": false }, "STYLEDEF_STYLEOPTS": { "rules": [], "inclusive": false }, "STYLEDEF_STYLES": { "rules": [31], "inclusive": false }, "STYLE_IDS": { "rules": [], "inclusive": false }, "STYLE": { "rules": [30], "inclusive": false }, "CLASS_STYLE": { "rules": [28], "inclusive": false }, "CLASS": { "rules": [27], "inclusive": false }, "CLASSDEFID": { "rules": [25], "inclusive": false }, "CLASSDEF": { "rules": [23, 24], "inclusive": false }, "acc_descr_multiline": { "rules": [20, 21], "inclusive": false }, "acc_descr": { "rules": [18], "inclusive": false }, "acc_title": { "rules": [16], "inclusive": false }, "SCALE": { "rules": [13, 14, 33, 34], "inclusive": false }, "ALIAS": { "rules": [], "inclusive": false }, "STATE_ID": { "rules": [48], "inclusive": false }, "STATE_STRING": { "rules": [49, 50], "inclusive": false }, "FORK_STATE": { "rules": [], "inclusive": false }, "STATE": { "rules": [9, 10, 36, 37, 38, 39, 40, 41, 46, 47, 51, 52, 53], "inclusive": false }, "ID": { "rules": [9, 10], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 15, 17, 19, 22, 26, 29, 32, 35, 53, 57, 68, 69, 70, 71, 72, 73, 74, 76, 77, 78], "inclusive": true } } }; return lexer3; }(); parser23.lexer = lexer2; function Parser3() { this.yy = {}; } __name(Parser3, "Parser"); Parser3.prototype = parser23; parser23.Parser = Parser3; return new Parser3(); }(); parser14.parser = parser14; stateDiagram_default = parser14; } }); // src/diagrams/state/stateCommon.ts var DEFAULT_DIAGRAM_DIRECTION, DEFAULT_NESTED_DOC_DIR, STMT_STATE, 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 = "LR"; DEFAULT_NESTED_DOC_DIR = "TB"; STMT_STATE = "state"; 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 = "text"; 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.js 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(nodes7, nodeData2, classes6) { if (!nodeData2.id || nodeData2.id === "" || nodeData2.id === "") { return; } if (nodeData2.cssClasses) { if (!Array.isArray(nodeData2.cssCompiledStyles)) { nodeData2.cssCompiledStyles = []; } nodeData2.cssClasses.split(" ").forEach((cssClass) => { if (classes6.get(cssClass)) { const classDef = classes6.get(cssClass); nodeData2.cssCompiledStyles = [...nodeData2.cssCompiledStyles, ...classDef.styles]; } }); } const existingNodeData = nodes7.find((node2) => node2.id === nodeData2.id); if (existingNodeData) { Object.assign(existingNodeData, nodeData2); } else { nodes7.push(nodeData2); } } function getClassesFromDbInfo(dbInfoItem) { return dbInfoItem?.classes?.join(" ") ?? ""; } function getStylesFromDbInfo(dbInfoItem) { return dbInfoItem?.styles ?? []; } var nodeDb, graphItemCount, setupDoc, getDir2, dataFetcher, reset2; var init_dataFetcher = __esm({ "src/diagrams/state/dataFetcher.js"() { "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, nodes7, edges5, altFlag, look, classes6) => { log.trace("items", doc); doc.forEach((item) => { switch (item.stmt) { case STMT_STATE: dataFetcher(parentParsedItem, item, diagramStates, nodes7, edges5, altFlag, look, classes6); break; case DEFAULT_STATE_TYPE: dataFetcher(parentParsedItem, item, diagramStates, nodes7, edges5, altFlag, look, classes6); break; case STMT_RELATION: { dataFetcher( parentParsedItem, item.state1, diagramStates, nodes7, edges5, altFlag, look, classes6 ); dataFetcher( parentParsedItem, item.state2, diagramStates, nodes7, edges5, altFlag, look, classes6 ); const edgeData2 = { id: "edge" + graphItemCount, start: item.state1.id, end: item.state2.id, arrowhead: "normal", arrowTypeEnd: "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 }; edges5.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, nodes7, edges5, altFlag, look, classes6) => { const itemId = parsedItem.id; const dbState = diagramStates.get(itemId); const classStr = getClassesFromDbInfo(dbState); const style3 = getStylesFromDbInfo(dbState); 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, getConfig2()), 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 > 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, getConfig2()); } 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.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 }; 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, cssClasses: CSS_DIAGRAM_NOTE, // useHtmlLabels: false, cssStyles: [], cssCompilesStyles: [], id: itemId + NOTE_ID + "-" + graphItemCount, domId: stateDomId(itemId, graphItemCount, NOTE), type: newNode.type, isGroup: newNode.type === "group", padding: getConfig2().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(nodes7, groupData, classes6); insertOrUpdateNode(nodes7, noteData, classes6); insertOrUpdateNode(nodes7, nodeData2, classes6); let from2 = itemId; let to = noteData.id; if (parsedItem.note.position === "left of") { from2 = noteData.id; to = itemId; } edges5.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(nodes7, nodeData2, classes6); } } if (parsedItem.doc) { log.trace("Adding nodes children "); setupDoc(parsedItem, parsedItem.doc, diagramStates, nodes7, edges5, !altFlag, look, classes6); } }, "dataFetcher"); reset2 = /* @__PURE__ */ __name(() => { nodeDb.clear(); graphItemCount = 0; }, "reset"); } }); // src/diagrams/state/stateRenderer-v3-unified.ts var getDir3, getClasses5, 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_render(); 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"); getClasses5 = /* @__PURE__ */ __name(function(text3, diagramObj) { diagramObj.db.extract(diagramObj.db.getRootDocV2()); return diagramObj.db.getClasses(); }, "getClasses"); draw13 = /* @__PURE__ */ __name(async function(text3, id28, _version, diag) { log.info("REF0:"); log.info("Drawing state diagram (v2)", id28); const { securityLevel, state: conf7, layout: layout6 } = getConfig2(); diag.db.extract(diag.db.getRootDocV2()); const data4Layout = diag.db.getData(); const svg = getDiagramElement(id28, securityLevel); data4Layout.type = diag.type; data4Layout.layoutAlgorithm = layout6; data4Layout.nodeSpacing = conf7?.nodeSpacing || 50; data4Layout.rankSpacing = conf7?.rankSpacing || 50; data4Layout.markers = ["barb"]; data4Layout.diagramId = id28; await render4(data4Layout, svg); const padding2 = 8; utils_default2.insertTitle( svg, "statediagramTitleText", conf7?.titleTopMargin ?? 25, diag.db.getDiagramTitle() ); setupViewPortForSVG(svg, padding2, CSS_DIAGRAM, conf7?.useMaxWidth ?? true); }, "draw"); stateRenderer_v3_unified_default = { getClasses: getClasses5, draw: draw13, getDir: getDir3 }; } }); // src/diagrams/state/stateDb.js function newClassesList() { return /* @__PURE__ */ new Map(); } function startIdIfNeeded(id28 = "") { let fixedId = id28; if (id28 === START_NODE) { startEndCount++; fixedId = `${START_TYPE}${startEndCount}`; } return fixedId; } function startTypeIfNeeded(id28 = "", type3 = DEFAULT_STATE_TYPE) { return id28 === START_NODE ? START_TYPE : type3; } function endIdIfNeeded(id28 = "") { let fixedId = id28; if (id28 === END_NODE) { startEndCount++; fixedId = `${END_TYPE}${startEndCount}`; } return fixedId; } function endTypeIfNeeded(id28 = "", type3 = DEFAULT_STATE_TYPE) { return id28 === END_NODE ? END_TYPE : type3; } function addRelationObjs(item1, item2, relationTitle) { let id1 = startIdIfNeeded(item1.id.trim()); let type1 = startTypeIfNeeded(item1.id.trim(), item1.type); let id28 = startIdIfNeeded(item2.id.trim()); let type22 = startTypeIfNeeded(item2.id.trim(), item2.type); addState( id1, type1, item1.doc, item1.description, item1.note, item1.classes, item1.styles, item1.textStyles ); addState( id28, type22, item2.doc, item2.description, item2.note, item2.classes, item2.styles, item2.textStyles ); currentDocument.relations.push({ id1, id2: id28, relationTitle: common_default.sanitizeText(relationTitle, getConfig2()) }); } var START_NODE, START_TYPE, END_NODE, END_TYPE, COLOR_KEYWORD, FILL_KEYWORD, BG_FILL, STYLECLASS_SEP, nodes, edges2, direction3, rootDoc, classes3, newDoc, documents, currentDocument, startEndCount, dividerCnt, lineType2, relationType2, clone2, setRootDoc, getRootDoc, docTranslator, getRootDocV2, extract, addState, clear18, getState, getStates, logDocuments, getRelations2, addRelation2, addDescription, cleanupLabel2, getDividerId, addStyleClass, getClasses6, setCssClass2, setStyle, setTextStyle, getDirection4, setDirection4, trimColon, getData3, stateDb_default; var init_stateDb = __esm({ "src/diagrams/state/stateDb.js"() { "use strict"; init_logger(); init_utils2(); init_common(); init_diagramAPI(); init_commonDb(); init_dataFetcher(); init_stateRenderer_v3_unified(); init_stateCommon(); START_NODE = "[*]"; START_TYPE = "start"; END_NODE = START_NODE; END_TYPE = "end"; COLOR_KEYWORD = "color"; FILL_KEYWORD = "fill"; BG_FILL = "bgFill"; STYLECLASS_SEP = ","; __name(newClassesList, "newClassesList"); nodes = []; edges2 = []; direction3 = DEFAULT_DIAGRAM_DIRECTION; rootDoc = []; classes3 = newClassesList(); newDoc = /* @__PURE__ */ __name(() => { return { /** @type {{ id1: string, id2: string, relationTitle: string }[]} */ relations: [], states: /* @__PURE__ */ new Map(), documents: {} }; }, "newDoc"); documents = { root: newDoc() }; currentDocument = documents.root; startEndCount = 0; dividerCnt = 0; lineType2 = { LINE: 0, DOTTED_LINE: 1 }; relationType2 = { AGGREGATION: 0, EXTENSION: 1, COMPOSITION: 2, DEPENDENCY: 3 }; clone2 = /* @__PURE__ */ __name((o2) => JSON.parse(JSON.stringify(o2)), "clone"); setRootDoc = /* @__PURE__ */ __name((o2) => { log.info("Setting root doc", o2); rootDoc = o2; }, "setRootDoc"); getRootDoc = /* @__PURE__ */ __name(() => rootDoc, "getRootDoc"); docTranslator = /* @__PURE__ */ __name((parent4, node2, first3) => { if (node2.stmt === STMT_RELATION) { docTranslator(parent4, node2.state1, true); docTranslator(parent4, node2.state2, false); } else { if (node2.stmt === STMT_STATE) { if (node2.id === "[*]") { node2.id = first3 ? parent4.id + "_start" : parent4.id + "_end"; node2.start = first3; } else { node2.id = node2.id.trim(); } } if (node2.doc) { const doc = []; let currentDoc = []; let i2; for (i2 = 0; i2 < node2.doc.length; i2++) { if (node2.doc[i2].type === DIVIDER_TYPE) { const newNode = clone2(node2.doc[i2]); newNode.doc = clone2(currentDoc); doc.push(newNode); currentDoc = []; } else { currentDoc.push(node2.doc[i2]); } } if (doc.length > 0 && currentDoc.length > 0) { const newNode = { stmt: STMT_STATE, id: generateId(), type: "divider", doc: clone2(currentDoc) }; doc.push(clone2(newNode)); node2.doc = doc; } node2.doc.forEach((docNode) => docTranslator(node2, docNode, true)); } } }, "docTranslator"); getRootDocV2 = /* @__PURE__ */ __name(() => { docTranslator({ id: "root" }, { id: "root", doc: rootDoc }, true); return { id: "root", doc: rootDoc }; }, "getRootDocV2"); extract = /* @__PURE__ */ __name((_doc) => { let doc; if (_doc.doc) { doc = _doc.doc; } else { doc = _doc; } log.info(doc); clear18(true); log.info("Extract initial document:", doc); doc.forEach((item) => { log.warn("Statement", item.stmt); switch (item.stmt) { case STMT_STATE: addState( item.id.trim(), item.type, item.doc, item.description, item.note, item.classes, item.styles, item.textStyles ); break; case STMT_RELATION: addRelation2(item.state1, item.state2, item.description); break; case STMT_CLASSDEF: addStyleClass(item.id.trim(), item.classes); break; case STMT_STYLEDEF: { const ids = item.id.trim().split(","); const styles3 = item.styleClass.split(","); ids.forEach((id28) => { let foundState = getState(id28); if (foundState === void 0) { const trimmedId = id28.trim(); addState(trimmedId); foundState = getState(trimmedId); } foundState.styles = styles3.map((s2) => s2.replace(/;/g, "")?.trim()); }); } break; case STMT_APPLYCLASS: setCssClass2(item.id.trim(), item.styleClass); break; } }); const diagramStates = getStates(); const config6 = getConfig2(); const look = config6.look; reset2(); dataFetcher(void 0, getRootDocV2(), diagramStates, nodes, edges2, true, look, classes3); nodes.forEach((node2) => { if (Array.isArray(node2.label)) { 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]; } }); }, "extract"); addState = /* @__PURE__ */ __name(function(id28, type3 = DEFAULT_STATE_TYPE, doc = null, descr = null, note3 = null, classes6 = null, styles3 = null, textStyles = null) { const trimmedId = id28?.trim(); if (!currentDocument.states.has(trimmedId)) { log.info("Adding state ", trimmedId, descr); currentDocument.states.set(trimmedId, { id: trimmedId, descriptions: [], type: type3, doc, note: note3, classes: [], styles: [], textStyles: [] }); } else { if (!currentDocument.states.get(trimmedId).doc) { currentDocument.states.get(trimmedId).doc = doc; } if (!currentDocument.states.get(trimmedId).type) { currentDocument.states.get(trimmedId).type = type3; } } if (descr) { log.info("Setting state description", trimmedId, descr); if (typeof descr === "string") { addDescription(trimmedId, descr.trim()); } if (typeof descr === "object") { descr.forEach((des) => addDescription(trimmedId, des.trim())); } } if (note3) { const doc2 = currentDocument.states.get(trimmedId); doc2.note = note3; doc2.note.text = common_default.sanitizeText(doc2.note.text, getConfig2()); } if (classes6) { log.info("Setting state classes", trimmedId, classes6); const classesList = typeof classes6 === "string" ? [classes6] : classes6; classesList.forEach((cssClass) => setCssClass2(trimmedId, cssClass.trim())); } if (styles3) { log.info("Setting state styles", trimmedId, styles3); const stylesList = typeof styles3 === "string" ? [styles3] : styles3; stylesList.forEach((style3) => setStyle(trimmedId, style3.trim())); } if (textStyles) { log.info("Setting state styles", trimmedId, styles3); const textStylesList = typeof textStyles === "string" ? [textStyles] : textStyles; textStylesList.forEach((textStyle) => setTextStyle(trimmedId, textStyle.trim())); } }, "addState"); clear18 = /* @__PURE__ */ __name(function(saveCommon) { nodes = []; edges2 = []; documents = { root: newDoc() }; currentDocument = documents.root; startEndCount = 0; classes3 = newClassesList(); if (!saveCommon) { clear(); } }, "clear"); getState = /* @__PURE__ */ __name(function(id28) { return currentDocument.states.get(id28); }, "getState"); getStates = /* @__PURE__ */ __name(function() { return currentDocument.states; }, "getStates"); logDocuments = /* @__PURE__ */ __name(function() { log.info("Documents = ", documents); }, "logDocuments"); getRelations2 = /* @__PURE__ */ __name(function() { return currentDocument.relations; }, "getRelations"); __name(startIdIfNeeded, "startIdIfNeeded"); __name(startTypeIfNeeded, "startTypeIfNeeded"); __name(endIdIfNeeded, "endIdIfNeeded"); __name(endTypeIfNeeded, "endTypeIfNeeded"); __name(addRelationObjs, "addRelationObjs"); addRelation2 = /* @__PURE__ */ __name(function(item1, item2, title2) { if (typeof item1 === "object") { addRelationObjs(item1, item2, title2); } else { const id1 = startIdIfNeeded(item1.trim()); const type1 = startTypeIfNeeded(item1); const id28 = endIdIfNeeded(item2.trim()); const type22 = endTypeIfNeeded(item2); addState(id1, type1); addState(id28, type22); currentDocument.relations.push({ id1, id2: id28, title: common_default.sanitizeText(title2, getConfig2()) }); } }, "addRelation"); addDescription = /* @__PURE__ */ __name(function(id28, descr) { const theState = currentDocument.states.get(id28); const _descr = descr.startsWith(":") ? descr.replace(":", "").trim() : descr; theState.descriptions.push(common_default.sanitizeText(_descr, getConfig2())); }, "addDescription"); cleanupLabel2 = /* @__PURE__ */ __name(function(label) { if (label.substring(0, 1) === ":") { return label.substr(2).trim(); } else { return label.trim(); } }, "cleanupLabel"); getDividerId = /* @__PURE__ */ __name(() => { dividerCnt++; return "divider-id-" + dividerCnt; }, "getDividerId"); addStyleClass = /* @__PURE__ */ __name(function(id28, styleAttributes = "") { if (!classes3.has(id28)) { classes3.set(id28, { id: id28, styles: [], textStyles: [] }); } const foundClass = classes3.get(id28); 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"); getClasses6 = /* @__PURE__ */ __name(function() { return classes3; }, "getClasses"); setCssClass2 = /* @__PURE__ */ __name(function(itemIds, cssClassName) { itemIds.split(",").forEach(function(id28) { let foundState = getState(id28); if (foundState === void 0) { const trimmedId = id28.trim(); addState(trimmedId); foundState = getState(trimmedId); } foundState.classes.push(cssClassName); }); }, "setCssClass"); setStyle = /* @__PURE__ */ __name(function(itemId, styleText) { const item = getState(itemId); if (item !== void 0) { item.styles.push(styleText); } }, "setStyle"); setTextStyle = /* @__PURE__ */ __name(function(itemId, cssClassName) { const item = getState(itemId); if (item !== void 0) { item.textStyles.push(cssClassName); } }, "setTextStyle"); getDirection4 = /* @__PURE__ */ __name(() => direction3, "getDirection"); setDirection4 = /* @__PURE__ */ __name((dir2) => { direction3 = dir2; }, "setDirection"); trimColon = /* @__PURE__ */ __name((str2) => str2 && str2[0] === ":" ? str2.substr(1).trim() : str2.trim(), "trimColon"); getData3 = /* @__PURE__ */ __name(() => { const config6 = getConfig2(); return { nodes, edges: edges2, other: {}, config: config6, direction: getDir3(getRootDocV2()) }; }, "getData"); stateDb_default = { getConfig: /* @__PURE__ */ __name(() => getConfig2().state, "getConfig"), getData: getData3, addState, clear: clear18, getState, getStates, getRelations: getRelations2, getClasses: getClasses6, getDirection: getDirection4, addRelation: addRelation2, getDividerId, setDirection: setDirection4, cleanupLabel: cleanupLabel2, lineType: lineType2, relationType: relationType2, logDocuments, getRootDoc, setRootDoc, getRootDocV2, extract, trimColon, getAccTitle, setAccTitle, getAccDescription, setAccDescription, addStyleClass, setCssClass: setCssClass2, addDescription, setDiagramTitle, getDiagramTitle }; } }); // src/diagrams/state/styles.js var getStyles11, styles_default10; var init_styles10 = __esm({ "src/diagrams/state/styles.js"() { "use strict"; getStyles11 = /* @__PURE__ */ __name((options3) => ` defs #statediagram-barbEnd { fill: ${options3.transitionColor}; stroke: ${options3.transitionColor}; } g.stateGroup text { fill: ${options3.nodeBorder}; stroke: none; font-size: 10px; } g.stateGroup text { fill: ${options3.textColor}; stroke: none; font-size: 10px; } g.stateGroup .state-title { font-weight: bolder; fill: ${options3.stateLabelColor}; } g.stateGroup rect { fill: ${options3.mainBkg}; stroke: ${options3.nodeBorder}; } g.stateGroup line { stroke: ${options3.lineColor}; stroke-width: 1; } .transition { stroke: ${options3.transitionColor}; stroke-width: 1; fill: none; } .stateGroup .composit { fill: ${options3.background}; border-bottom: 1px } .stateGroup .alt-composit { fill: #e0e0e0; border-bottom: 1px } .state-note { stroke: ${options3.noteBorderColor}; fill: ${options3.noteBkgColor}; text { fill: ${options3.noteTextColor}; stroke: none; font-size: 10px; } } .stateLabel .box { stroke: none; stroke-width: 0; fill: ${options3.mainBkg}; opacity: 0.5; } .edgeLabel .label rect { fill: ${options3.labelBackgroundColor}; opacity: 0.5; } .edgeLabel { background-color: ${options3.edgeLabelBackground}; p { background-color: ${options3.edgeLabelBackground}; } rect { opacity: 0.5; background-color: ${options3.edgeLabelBackground}; fill: ${options3.edgeLabelBackground}; } text-align: center; } .edgeLabel .label text { fill: ${options3.transitionLabelColor || options3.tertiaryTextColor}; } .label div .edgeLabel { color: ${options3.transitionLabelColor || options3.tertiaryTextColor}; } .stateLabel text { fill: ${options3.stateLabelColor}; font-size: 10px; font-weight: bold; } .node circle.state-start { fill: ${options3.specialStateColor}; stroke: ${options3.specialStateColor}; } .node .fork-join { fill: ${options3.specialStateColor}; stroke: ${options3.specialStateColor}; } .node circle.state-end { fill: ${options3.innerEndBackground}; stroke: ${options3.background}; stroke-width: 1.5 } .end-state-inner { fill: ${options3.compositeBackground || options3.background}; // stroke: ${options3.background}; stroke-width: 1.5 } .node rect { fill: ${options3.stateBkg || options3.mainBkg}; stroke: ${options3.stateBorder || options3.nodeBorder}; stroke-width: 1px; } .node polygon { fill: ${options3.mainBkg}; stroke: ${options3.stateBorder || options3.nodeBorder};; stroke-width: 1px; } #statediagram-barbEnd { fill: ${options3.lineColor}; } .statediagram-cluster rect { fill: ${options3.compositeTitleBackground}; stroke: ${options3.stateBorder || options3.nodeBorder}; stroke-width: 1px; } .cluster-label, .nodeLabel { color: ${options3.stateLabelColor}; // line-height: 1; } .statediagram-cluster rect.outer { rx: 5px; ry: 5px; } .statediagram-state .divider { stroke: ${options3.stateBorder || options3.nodeBorder}; } .statediagram-state .title-state { rx: 5px; ry: 5px; } .statediagram-cluster.statediagram-cluster .inner { fill: ${options3.compositeBackground || options3.background}; } .statediagram-cluster.statediagram-cluster-alt .inner { fill: ${options3.altBackground ? options3.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: ${options3.altBackground ? options3.altBackground : "#efefef"}; } .note-edge { stroke-dasharray: 5; } .statediagram-note rect { fill: ${options3.noteBkgColor}; stroke: ${options3.noteBorderColor}; stroke-width: 1px; rx: 0; ry: 0; } .statediagram-note rect { fill: ${options3.noteBkgColor}; stroke: ${options3.noteBorderColor}; stroke-width: 1px; rx: 0; ry: 0; } .statediagram-note text { fill: ${options3.noteTextColor}; } .statediagram-note .nodeLabel { color: ${options3.noteTextColor}; } .statediagram .edgeLabel { color: red; // ${options3.noteTextColor}; } #dependencyStart, #dependencyEnd { fill: ${options3.lineColor}; stroke: ${options3.lineColor}; stroke-width: 1; } .statediagramTitleText { text-anchor: middle; font-size: 18px; fill: ${options3.textColor}; } `, "getStyles"); styles_default10 = getStyles11; } }); // src/diagrams/state/id-cache.js var idCache, set4, get4, keys2, size2, id_cache_default; var init_id_cache = __esm({ "src/diagrams/state/id-cache.js"() { "use strict"; idCache = {}; set4 = /* @__PURE__ */ __name((key, val) => { idCache[key] = val; }, "set"); get4 = /* @__PURE__ */ __name((k2) => idCache[k2], "get"); keys2 = /* @__PURE__ */ __name(() => Object.keys(idCache), "keys"); size2 = /* @__PURE__ */ __name(() => keys2().length, "size"); id_cache_default = { get: get4, set: set4, keys: keys2, size: size2 }; } }); // 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_id_cache(); 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 state5 = 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 = state5.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 state5; }, "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, y5, g2) => { let textHeight = 0; const textElem = g2.append("text"); textElem.style("text-anchor", "start"); textElem.attr("class", "noteText"); let text3 = _text.replace(/\r\n/g, "
    "); text3 = text3.replace(/\n/g, "
    "); const lines = text3.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", y5 + textHeight + 1.25 * getConfig2().state.noteMargin); } } return { textWidth: textElem.node().getBBox().width, textHeight }; }, "_drawLongText"); drawNote2 = /* @__PURE__ */ __name((text3, 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(text3, 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 id28 = stateDef.id; const stateInfo = { id: id28, label: stateDef.id, width: 0, height: 0 }; const g2 = elem.append("g").attr("id", id28).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; id_cache_default.set(id28, stateInfo); return stateInfo; }, "drawState"); edgeCount = 0; drawEdge = /* @__PURE__ */ __name(function(elem, path4, relation) { const getRelationType = /* @__PURE__ */ __name(function(type3) { switch (type3) { case stateDb_default.relationType.AGGREGATION: return "aggregation"; case stateDb_default.relationType.EXTENSION: return "extension"; case stateDb_default.relationType.COMPOSITION: return "composition"; case stateDb_default.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(d2) { return d2.x; }).y(function(d2) { return d2.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 = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; url = url.replace(/\(/g, "\\("); url = url.replace(/\)/g, "\\)"); } svgPath.attr( "marker-end", "url(" + url + "#" + getRelationType(stateDb_default.relationType.DEPENDENCY) + "End)" ); if (relation.title !== void 0) { const label = elem.append("g").attr("class", "stateLabel"); const { x: x5, y: y5 } = utils_default2.calcLabelPosition(path4.points); const rows = common_default.getRows(relation.title); let titleHeight = 0; const titleRows = []; let maxWidth = 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", y5 + titleHeight); const boundsTmp = title2.node().getBBox(); maxWidth = Math.max(maxWidth, boundsTmp.width); minX = Math.min(minX, boundsTmp.x); log.info(boundsTmp.x, x5, y5 + titleHeight); if (titleHeight === 0) { const titleBox = title2.node().getBBox(); titleHeight = titleBox.height; log.info("Title height", titleHeight, y5); } 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", y5 + i2 * titleHeight - heightAdj)); boxHeight = titleHeight * rows.length; } const bounds4 = label.node().getBBox(); label.insert("rect", ":first-child").attr("class", "box").attr("x", x5 - maxWidth / 2 - getConfig2().state.padding / 2).attr("y", y5 - boxHeight / 2 - getConfig2().state.padding / 2 - 3.5).attr("width", maxWidth + getConfig2().state.padding).attr("height", boxHeight + getConfig2().state.padding); log.info(bounds4); } edgeCount++; }, "drawEdge"); } }); // src/diagrams/state/stateRenderer.js var conf5, transformationLog, setConf5, insertMarkers3, 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 = {}; setConf5 = /* @__PURE__ */ __name(function() { }, "setConf"); insertMarkers3 = /* @__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(text3, id28, _version, diagObj) { conf5 = getConfig2().state; const securityLevel = getConfig2().securityLevel; let sandboxElement; if (securityLevel === "sandbox") { sandboxElement = select_default2("#i" + id28); } 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 " + text3); const diagram25 = root4.select(`[id='${id28}']`); insertMarkers3(diagram25); const rootDoc2 = diagObj.db.getRootDoc(); renderDoc(rootDoc2, diagram25, void 0, false, root4, doc, diagObj); const padding2 = conf5.padding; const bounds4 = diagram25.node().getBBox(); const width3 = bounds4.width + padding2 * 2; const height2 = bounds4.height + padding2 * 2; const svgWidth = width3 * 1.75; configureSvgSize(diagram25, height2, svgWidth, conf5.useMaxWidth); diagram25.attr( "viewBox", `${bounds4.x - conf5.padding} ${bounds4.y - conf5.padding} ` + width3 + " " + height2 ); }, "draw"); getLabelWidth = /* @__PURE__ */ __name((text3) => { return text3 ? text3.length * conf5.fontSizeFactor : 1; }, "getLabelWidth"); renderDoc = /* @__PURE__ */ __name((doc, diagram25, 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 : conf5.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 : conf5.edgeLengthFactor, nodeSep: edgeFreeDoc ? 1 : 50, ranker: "tight-tree", // ranker: 'network-simplex' isMultiGraph: true }); } graph.setDefaultEdgeLabel(function() { return {}; }); diagObj.db.extract(doc); const states = diagObj.db.getStates(); const relations3 = 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 = diagram25.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 + conf5.padding / 2; transformationLog[stateDef.id] = { y: conf5.compositTitleSize }; } else { let boxBounds = sub2.node().getBBox(); node2.width = boxBounds.width; node2.height = boxBounds.height; } } else { node2 = drawState(diagram25, stateDef, graph); } if (stateDef.note) { const noteDef = { descriptions: [], id: stateDef.id + "-note", note: stateDef.note, type: "note" }; const note3 = drawState(diagram25, 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 cnt5 = 0; relations3.forEach(function(relation) { cnt5++; log.debug("Setting edge", relation); graph.setEdge( relation.id1, relation.id2, { relation, width: getLabelWidth(relation.title), height: conf5.labelHeight * common_default.getRows(relation.title).length, labelpos: "c" }, "id" + cnt5 ); }); layout(graph); log.debug("Graph after layout", graph.nodes()); const svgElem = diagram25.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(diagram25, 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 * conf5.padding; stateInfo.height = stateBox.height + 2 * conf5.padding; log.debug("Doc rendered", stateInfo, graph); return stateInfo; }, "renderDoc"); stateRenderer_default = { setConf: setConf5, draw: draw14 }; } }); // src/diagrams/state/stateDiagram.ts var stateDiagram_exports = {}; __export(stateDiagram_exports, { diagram: () => diagram14 }); var diagram14; var init_stateDiagram2 = __esm({ "src/diagrams/state/stateDiagram.ts"() { "use strict"; init_stateDiagram(); init_stateDb(); init_styles10(); init_stateRenderer(); diagram14 = { parser: stateDiagram_default, db: stateDb_default, renderer: stateRenderer_default, styles: styles_default10, init: /* @__PURE__ */ __name((cnf) => { if (!cnf.state) { cnf.state = {}; } cnf.state.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; stateDb_default.clear(); }, "init") }; } }); // src/diagrams/state/stateDiagram-v2.ts var stateDiagram_v2_exports = {}; __export(stateDiagram_v2_exports, { diagram: () => diagram15 }); var diagram15; var init_stateDiagram_v2 = __esm({ "src/diagrams/state/stateDiagram-v2.ts"() { "use strict"; init_stateDiagram(); init_stateDb(); init_styles10(); init_stateRenderer_v3_unified(); diagram15 = { parser: stateDiagram_default, db: stateDb_default, renderer: stateRenderer_v3_unified_default, styles: styles_default10, init: /* @__PURE__ */ __name((cnf) => { if (!cnf.state) { cnf.state = {}; } cnf.state.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; stateDb_default.clear(); }, "init") }; } }); // src/diagrams/user-journey/parser/journey.jison var parser15, journey_default; var init_journey = __esm({ "src/diagrams/user-journey/parser/journey.jison"() { "use strict"; parser15 = function() { var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l2) { for (o3 = o3 || {}, l2 = k2.length; l2--; o3[k2[l2]] = 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 parser23 = { 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 parse8(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 lexer3 = 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]; } } lexer3.setInput(input, sharedState.yy); sharedState.yy.lexer = lexer3; sharedState.yy.parser = this; if (typeof lexer3.yylloc == "undefined") { lexer3.yylloc = {}; } var yyloc = lexer3.yylloc; lstack.push(yyloc); var ranges = lexer3.options && lexer3.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 lex2() { var token2; token2 = tstack.pop() || lexer3.lex() || EOF2; if (typeof token2 !== "number") { if (token2 instanceof Array) { tstack = token2; token2 = tstack.pop(); } token2 = self2.symbols_[token2] || token2; } return token2; } __name(lex2, "lex"); var symbol, preErrorSymbol, state5, action, a2, r2, yyval = {}, p3, len, newState2, expected; while (true) { state5 = stack[stack.length - 1]; if (this.defaultActions[state5]) { action = this.defaultActions[state5]; } else { if (symbol === null || typeof symbol == "undefined") { symbol = lex2(); } action = table[state5] && table[state5][symbol]; } if (typeof action === "undefined" || !action.length || !action[0]) { var errStr = ""; expected = []; for (p3 in table[state5]) { if (this.terminals_[p3] && p3 > TERROR) { expected.push("'" + this.terminals_[p3] + "'"); } } if (lexer3.showPosition) { errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer3.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: lexer3.match, token: this.terminals_[symbol] || symbol, line: lexer3.yylineno, loc: yyloc, expected }); } if (action[0] instanceof Array && action.length > 1) { throw new Error("Parse Error: multiple actions possible at state: " + state5 + ", token: " + symbol); } switch (action[0]) { case 1: stack.push(symbol); vstack.push(lexer3.yytext); lstack.push(lexer3.yylloc); stack.push(action[1]); symbol = null; if (!preErrorSymbol) { yyleng = lexer3.yyleng; yytext = lexer3.yytext; yylineno = lexer3.yylineno; yyloc = lexer3.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 lexer2 = /* @__PURE__ */ function() { var lexer3 = { 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(match2, 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 = match2[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 + match2[0].length }; this.yytext += match2[0]; this.match += match2[0]; this.matches = match2; 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(match2[0].length); this.matched += match2[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, match2, tempMatch, index; if (!this._more) { this.yytext = ""; this.match = ""; } var rules = this._currentRules(); for (var i2 = 0; i2 < rules.length; i2++) { tempMatch = this._input.match(this.rules[rules[i2]]); if (tempMatch && (!match2 || tempMatch[0].length > match2[0].length)) { match2 = tempMatch; index = i2; if (this.options.backtrack_lexer) { token2 = this.test_match(tempMatch, rules[i2]); if (token2 !== false) { return token2; } else if (this._backtrack) { match2 = false; continue; } else { return false; } } else if (!this.options.flex) { break; } } } if (match2) { token2 = this.test_match(match2, rules[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 lex2() { 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 lexer3; }(); parser23.lexer = lexer2; function Parser3() { this.yy = {}; } __name(Parser3, "Parser"); Parser3.prototype = parser23; parser23.Parser = Parser3; return new Parser3(); }(); parser15.parser = parser15; journey_default = parser15; } }); // src/diagrams/user-journey/journeyDb.js var currentSection2, sections3, tasks2, rawTasks2, clear19, addSection3, getSections3, getTasks2, updateActors, addTask2, addTaskOrg2, compileTasks2, getActors2, journeyDb_default; var init_journeyDb = __esm({ "src/diagrams/user-journey/journeyDb.js"() { "use strict"; init_diagramAPI(); init_commonDb(); currentSection2 = ""; sections3 = []; tasks2 = []; rawTasks2 = []; clear19 = /* @__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"); getActors2 = /* @__PURE__ */ __name(function() { return updateActors(); }, "getActors"); journeyDb_default = { getConfig: /* @__PURE__ */ __name(() => getConfig2().journey, "getConfig"), clear: clear19, setDiagramTitle, getDiagramTitle, setAccTitle, getAccTitle, setAccDescription, getAccDescription, addSection: addSection3, getSections: getSections3, getTasks: getTasks2, addTask: addTask2, addTaskOrg: addTaskOrg2, getActors: getActors2 }; } }); // src/diagrams/user-journey/styles.js var getStyles12, styles_default11; var init_styles11 = __esm({ "src/diagrams/user-journey/styles.js"() { "use strict"; getStyles12 = /* @__PURE__ */ __name((options3) => `.label { font-family: 'trebuchet ms', verdana, arial, sans-serif; font-family: var(--mermaid-font-family); color: ${options3.textColor}; } .mouth { stroke: #666; } line { stroke: ${options3.textColor} } .legend { fill: ${options3.textColor}; } .label text { fill: #333; } .label { color: ${options3.textColor} } .face { ${options3.faceColor ? `fill: ${options3.faceColor}` : "fill: #FFF8DC"}; stroke: #999; } .node rect, .node circle, .node ellipse, .node polygon, .node path { fill: ${options3.mainBkg}; stroke: ${options3.nodeBorder}; stroke-width: 1px; } .node .label { text-align: center; } .node.clickable { cursor: pointer; } .arrowheadPath { fill: ${options3.arrowheadColor}; } .edgePath .path { stroke: ${options3.lineColor}; stroke-width: 1.5px; } .flowchart-link { stroke: ${options3.lineColor}; fill: none; } .edgeLabel { background-color: ${options3.edgeLabelBackground}; rect { opacity: 0.5; } text-align: center; } .cluster rect { } .cluster text { fill: ${options3.titleColor}; } div.mermaidTooltip { position: absolute; text-align: center; max-width: 200px; padding: 2px; font-family: 'trebuchet ms', verdana, arial, sans-serif; font-family: var(--mermaid-font-family); font-size: 12px; background: ${options3.tertiaryColor}; border: 1px solid ${options3.border2}; border-radius: 2px; pointer-events: none; z-index: 100; } .task-type-0, .section-type-0 { ${options3.fillType0 ? `fill: ${options3.fillType0}` : ""}; } .task-type-1, .section-type-1 { ${options3.fillType0 ? `fill: ${options3.fillType1}` : ""}; } .task-type-2, .section-type-2 { ${options3.fillType0 ? `fill: ${options3.fillType2}` : ""}; } .task-type-3, .section-type-3 { ${options3.fillType0 ? `fill: ${options3.fillType3}` : ""}; } .task-type-4, .section-type-4 { ${options3.fillType0 ? `fill: ${options3.fillType4}` : ""}; } .task-type-5, .section-type-5 { ${options3.fillType0 ? `fill: ${options3.fillType5}` : ""}; } .task-type-6, .section-type-6 { ${options3.fillType0 ? `fill: ${options3.fillType6}` : ""}; } .task-type-7, .section-type-7 { ${options3.fillType0 ? `fill: ${options3.fillType7}` : ""}; } .actor-0 { ${options3.actor0 ? `fill: ${options3.actor0}` : ""}; } .actor-1 { ${options3.actor1 ? `fill: ${options3.actor1}` : ""}; } .actor-2 { ${options3.actor2 ? `fill: ${options3.actor2}` : ""}; } .actor-3 { ${options3.actor3 ? `fill: ${options3.actor3}` : ""}; } .actor-4 { ${options3.actor4 ? `fill: ${options3.actor4}` : ""}; } .actor-5 { ${options3.actor5 ? `fill: ${options3.actor5}` : ""}; } `, "getStyles"); styles_default11 = getStyles12; } }); // 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, y5, width3, height2, cut) { return x5 + "," + y5 + " " + (x5 + width3) + "," + y5 + " " + (x5 + width3) + "," + (y5 + height2 - cut) + " " + (x5 + width3 - cut * 1.2) + "," + (y5 + height2) + " " + x5 + "," + (y5 + 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, conf7) { const g2 = elem.append("g"); const rect3 = getNoteRect(); rect3.x = section.x; rect3.y = section.y; rect3.fill = section.fill; rect3.width = conf7.width * section.taskCount + // width of the tasks conf7.diagramMarginX * (section.taskCount - 1); rect3.height = conf7.height; rect3.class = "journey-section section-type-" + section.num; rect3.rx = 3; rect3.ry = 3; drawRect5(g2, rect3); _drawTextCandidateFunc3(conf7)( section.text, g2, rect3.x, rect3.y, rect3.width, rect3.height, { class: "journey-section section-type-" + section.num }, conf7, section.colour ); }, "drawSection"); taskCount = -1; drawTask = /* @__PURE__ */ __name(function(elem, task, conf7) { const center4 = task.x + conf7.width / 2; const g2 = elem.append("g"); taskCount++; const maxHeight = 300 + 5 * 30; g2.append("line").attr("id", "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 = conf7.width; rect3.height = conf7.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(conf7)( task.task, g2, rect3.x, rect3.y, rect3.width, rect3.height, { class: "task" }, conf7, task.colour ); }, "drawTask"); drawBackgroundRect3 = /* @__PURE__ */ __name(function(elem, bounds4) { drawBackgroundRect(elem, bounds4); }, "drawBackgroundRect"); _drawTextCandidateFunc3 = /* @__PURE__ */ function() { function byText(content, g2, x5, y5, width3, height2, textAttrs, colour) { const text3 = g2.append("text").attr("x", x5 + width3 / 2).attr("y", y5 + height2 / 2 + 5).style("font-color", colour).style("text-anchor", "middle").text(content); _setTextAttrs(text3, textAttrs); } __name(byText, "byText"); function byTspan(content, g2, x5, y5, width3, height2, textAttrs, conf7, colour) { const { taskFontSize, taskFontFamily } = conf7; const lines = content.split(//gi); for (let i2 = 0; i2 < lines.length; i2++) { const dy = i2 * taskFontSize - taskFontSize * (lines.length - 1) / 2; const text3 = g2.append("text").attr("x", x5 + width3 / 2).attr("y", y5).attr("fill", colour).style("text-anchor", "middle").style("font-size", taskFontSize).style("font-family", taskFontFamily); text3.append("tspan").attr("x", x5 + width3 / 2).attr("dy", dy).text(lines[i2]); text3.attr("y", y5 + height2 / 2).attr("dominant-baseline", "central").attr("alignment-baseline", "central"); _setTextAttrs(text3, textAttrs); } } __name(byTspan, "byTspan"); function byFo(content, g2, x5, y5, width3, height2, textAttrs, conf7) { const body = g2.append("switch"); const f3 = body.append("foreignObject").attr("x", x5).attr("y", y5).attr("width", width3).attr("height", height2).attr("position", "fixed"); const text3 = f3.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%"); text3.append("div").attr("class", "label").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content); byTspan(content, body, x5, y5, width3, height2, textAttrs, conf7); _setTextAttrs(text3, 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(conf7) { return conf7.textPlacement === "fo" ? byFo : conf7.textPlacement === "old" ? byText : byTspan; }; }(); initGraphics = /* @__PURE__ */ __name(function(graphics) { graphics.append("defs").append("marker").attr("id", "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(diagram25) { const conf7 = getConfig2().journey; 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(diagram25, circleData); const labelData = { x: 40, y: yPos + 7, fill: "#666", text: person, textMargin: conf7.boxTextMargin | 5 }; svgDraw_default3.drawText(diagram25, labelData); yPos += 20; }); } var setConf6, actors, conf6, LEFT_MARGIN, draw15, bounds2, 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(); setConf6 = /* @__PURE__ */ __name(function(cnf) { const keys3 = Object.keys(cnf); keys3.forEach(function(key) { conf6[key] = cnf[key]; }); }, "setConf"); actors = {}; __name(drawActorLegend, "drawActorLegend"); conf6 = getConfig2().journey; LEFT_MARGIN = conf6.leftMargin; draw15 = /* @__PURE__ */ __name(function(text3, id28, version4, diagObj) { const conf7 = getConfig2().journey; const securityLevel = getConfig2().securityLevel; let sandboxElement; if (securityLevel === "sandbox") { sandboxElement = select_default2("#i" + id28); } const root4 = securityLevel === "sandbox" ? select_default2(sandboxElement.nodes()[0].contentDocument.body) : select_default2("body"); bounds2.init(); const diagram25 = root4.select("#" + id28); svgDraw_default3.initGraphics(diagram25); 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: conf7.actorColours[actorPos % conf7.actorColours.length], position: actorPos }; actorPos++; }); drawActorLegend(diagram25); bounds2.insert(0, 0, LEFT_MARGIN, Object.keys(actors).length * 50); drawTasks(diagram25, tasks4, 0); const box = bounds2.getBounds(); if (title2) { diagram25.append("text").text(title2).attr("x", LEFT_MARGIN).attr("font-size", "4ex").attr("font-weight", "bold").attr("y", 25); } const height2 = box.stopy - box.starty + 2 * conf7.diagramMarginY; const width3 = LEFT_MARGIN + box.stopx + 2 * conf7.diagramMarginX; configureSvgSize(diagram25, height2, width3, conf7.useMaxWidth); diagram25.append("line").attr("x1", LEFT_MARGIN).attr("y1", conf7.height * 4).attr("x2", width3 - LEFT_MARGIN - 4).attr("y2", conf7.height * 4).attr("stroke-width", 4).attr("stroke", "black").attr("marker-end", "url(#arrowhead)"); const extraVertForTitle = title2 ? 70 : 0; diagram25.attr("viewBox", `${box.startx} -25 ${width3} ${height2 + extraVertForTitle}`); diagram25.attr("preserveAspectRatio", "xMinYMin meet"); diagram25.attr("height", height2 + extraVertForTitle + 25); }, "draw"); bounds2 = { 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 conf7 = getConfig2().journey; const _self = this; let cnt5 = 0; function updateFn(type3) { return /* @__PURE__ */ __name(function updateItemBounds(item) { cnt5++; const n2 = _self.sequenceItems.length - cnt5 + 1; _self.updateVal(item, "starty", starty - n2 * conf7.boxMargin, Math.min); _self.updateVal(item, "stopy", stopy + n2 * conf7.boxMargin, Math.max); _self.updateVal(bounds2.data, "startx", startx - n2 * conf7.boxMargin, Math.min); _self.updateVal(bounds2.data, "stopx", stopx + n2 * conf7.boxMargin, Math.max); if (!(type3 === "activation")) { _self.updateVal(item, "startx", startx - n2 * conf7.boxMargin, Math.min); _self.updateVal(item, "stopx", stopx + n2 * conf7.boxMargin, Math.max); _self.updateVal(bounds2.data, "starty", starty - n2 * conf7.boxMargin, Math.min); _self.updateVal(bounds2.data, "stopy", stopy + n2 * conf7.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(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"), 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 = conf6.sectionFills; textColours = conf6.sectionColours; drawTasks = /* @__PURE__ */ __name(function(diagram25, tasks4, verticalPos) { const conf7 = getConfig2().journey; let lastSection = ""; const sectionVHeight = conf7.height * 2 + conf7.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 * conf7.taskMargin + i2 * conf7.width + LEFT_MARGIN, y: 50, text: task.section, fill, num, colour, taskCount: taskInSectionCount }; svgDraw_default3.drawSection(diagram25, section, conf7); lastSection = task.section; sectionNumber++; } const taskActors = task.people.reduce((acc, actorName) => { if (actors[actorName]) { acc[actorName] = actors[actorName]; } return acc; }, {}); task.x = i2 * conf7.taskMargin + i2 * conf7.width + LEFT_MARGIN; task.y = taskPos; task.width = conf7.diagramMarginX; task.height = conf7.diagramMarginY; task.colour = colour; task.fill = fill; task.num = num; task.actors = taskActors; svgDraw_default3.drawTask(diagram25, task, conf7); bounds2.insert(task.x, task.y, task.x + task.width + conf7.taskMargin, 300 + 5 * 30); } }, "drawTasks"); journeyRenderer_default = { setConf: setConf6, draw: draw15 }; } }); // src/diagrams/user-journey/journeyDiagram.ts var journeyDiagram_exports = {}; __export(journeyDiagram_exports, { diagram: () => diagram16 }); var diagram16; var init_journeyDiagram = __esm({ "src/diagrams/user-journey/journeyDiagram.ts"() { "use strict"; init_journey(); init_journeyDb(); init_styles11(); init_journeyRenderer(); diagram16 = { parser: journey_default, db: journeyDb_default, renderer: journeyRenderer_default, styles: styles_default11, init: /* @__PURE__ */ __name((cnf) => { journeyRenderer_default.setConf(cnf.journey); journeyDb_default.clear(); }, "init") }; } }); // src/diagrams/timeline/parser/timeline.jison var parser16, timeline_default; var init_timeline = __esm({ "src/diagrams/timeline/parser/timeline.jison"() { "use strict"; parser16 = function() { var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l2) { for (o3 = o3 || {}, l2 = k2.length; l2--; o3[k2[l2]] = v3) ; return o3; }, "o"), $V0 = [6, 8, 10, 11, 12, 14, 16, 17, 20, 21], $V1 = [1, 9], $V2 = [1, 10], $V3 = [1, 11], $V4 = [1, 12], $V5 = [1, 13], $V6 = [1, 16], $V7 = [1, 17]; var parser23 = { trace: /* @__PURE__ */ __name(function trace() { }, "trace"), yy: {}, symbols_: { "error": 2, "start": 3, "timeline": 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, "period_statement": 18, "event_statement": 19, "period": 20, "event": 21, "$accept": 0, "$end": 1 }, terminals_: { 2: "error", 4: "timeline", 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", 20: "period", 21: "event" }, 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, 1], [9, 1], [18, 1], [19, 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: 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.getCommonDb().setDiagramTitle($$[$0].substr(6)); this.$ = $$[$0].substr(6); break; case 9: this.$ = $$[$0].trim(); yy.getCommonDb().setAccTitle(this.$); break; case 10: case 11: this.$ = $$[$0].trim(); yy.getCommonDb().setAccDescription(this.$); break; case 12: yy.addSection($$[$0].substr(8)); this.$ = $$[$0].substr(8); break; case 15: yy.addTask($$[$0], 0, ""); this.$ = $$[$0]; break; case 16: yy.addEvent($$[$0].substr(2)); this.$ = $$[$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: $V1, 12: $V2, 14: $V3, 16: $V4, 17: $V5, 18: 14, 19: 15, 20: $V6, 21: $V7 }, o2($V0, [2, 7], { 1: [2, 1] }), o2($V0, [2, 3]), { 9: 18, 11: $V1, 12: $V2, 14: $V3, 16: $V4, 17: $V5, 18: 14, 19: 15, 20: $V6, 21: $V7 }, o2($V0, [2, 5]), o2($V0, [2, 6]), o2($V0, [2, 8]), { 13: [1, 19] }, { 15: [1, 20] }, o2($V0, [2, 11]), o2($V0, [2, 12]), o2($V0, [2, 13]), o2($V0, [2, 14]), o2($V0, [2, 15]), o2($V0, [2, 16]), o2($V0, [2, 4]), o2($V0, [2, 9]), o2($V0, [2, 10])], 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 parse8(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 lexer3 = 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]; } } lexer3.setInput(input, sharedState.yy); sharedState.yy.lexer = lexer3; sharedState.yy.parser = this; if (typeof lexer3.yylloc == "undefined") { lexer3.yylloc = {}; } var yyloc = lexer3.yylloc; lstack.push(yyloc); var ranges = lexer3.options && lexer3.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 lex2() { var token2; token2 = tstack.pop() || lexer3.lex() || EOF2; if (typeof token2 !== "number") { if (token2 instanceof Array) { tstack = token2; token2 = tstack.pop(); } token2 = self2.symbols_[token2] || token2; } return token2; } __name(lex2, "lex"); var symbol, preErrorSymbol, state5, action, a2, r2, yyval = {}, p3, len, newState2, expected; while (true) { state5 = stack[stack.length - 1]; if (this.defaultActions[state5]) { action = this.defaultActions[state5]; } else { if (symbol === null || typeof symbol == "undefined") { symbol = lex2(); } action = table[state5] && table[state5][symbol]; } if (typeof action === "undefined" || !action.length || !action[0]) { var errStr = ""; expected = []; for (p3 in table[state5]) { if (this.terminals_[p3] && p3 > TERROR) { expected.push("'" + this.terminals_[p3] + "'"); } } if (lexer3.showPosition) { errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer3.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: lexer3.match, token: this.terminals_[symbol] || symbol, line: lexer3.yylineno, loc: yyloc, expected }); } if (action[0] instanceof Array && action.length > 1) { throw new Error("Parse Error: multiple actions possible at state: " + state5 + ", token: " + symbol); } switch (action[0]) { case 1: stack.push(symbol); vstack.push(lexer3.yytext); lstack.push(lexer3.yylloc); stack.push(action[1]); symbol = null; if (!preErrorSymbol) { yyleng = lexer3.yyleng; yytext = lexer3.yytext; yylineno = lexer3.yylineno; yyloc = lexer3.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 lexer2 = /* @__PURE__ */ function() { var lexer3 = { 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(match2, 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 = match2[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 + match2[0].length }; this.yytext += match2[0]; this.match += match2[0]; this.matches = match2; 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(match2[0].length); this.matched += match2[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, match2, tempMatch, index; if (!this._more) { this.yytext = ""; this.match = ""; } var rules = this._currentRules(); for (var i2 = 0; i2 < rules.length; i2++) { tempMatch = this._input.match(this.rules[rules[i2]]); if (tempMatch && (!match2 || tempMatch[0].length > match2[0].length)) { match2 = tempMatch; index = i2; if (this.options.backtrack_lexer) { token2 = this.test_match(tempMatch, rules[i2]); if (token2 !== false) { return token2; } else if (this._backtrack) { match2 = false; continue; } else { return false; } } else if (!this.options.flex) { break; } } } if (match2) { token2 = this.test_match(match2, rules[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 lex2() { 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 21; break; case 16: return 20; break; case 17: return 6; break; case 18: return "INVALID"; break; } }, "anonymous"), rules: [/^(?:%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:#[^\n]*)/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]+)/i, /^(?:[^#:\n]+)/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], "inclusive": true } } }; return lexer3; }(); parser23.lexer = lexer2; function Parser3() { this.yy = {}; } __name(Parser3, "Parser"); Parser3.prototype = parser23; parser23.Parser = Parser3; return new Parser3(); }(); parser16.parser = parser16; timeline_default = parser16; } }); // src/diagrams/timeline/timelineDb.js var timelineDb_exports = {}; __export(timelineDb_exports, { addEvent: () => addEvent, addSection: () => addSection4, addTask: () => addTask3, addTaskOrg: () => addTaskOrg3, clear: () => clear20, default: () => timelineDb_default, getCommonDb: () => getCommonDb2, getSections: () => getSections4, getTasks: () => getTasks3 }); var currentSection3, currentTaskId, sections4, tasks3, rawTasks3, getCommonDb2, clear20, 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; sections4 = []; tasks3 = []; rawTasks3 = []; getCommonDb2 = /* @__PURE__ */ __name(() => commonDb_exports, "getCommonDb"); clear20 = /* @__PURE__ */ __name(function() { sections4.length = 0; tasks3.length = 0; currentSection3 = ""; rawTasks3.length = 0; clear(); }, "clear"); 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: clear20, getCommonDb: getCommonDb2, addSection: addSection4, getSections: getSections4, getTasks: getTasks3, addTask: addTask3, addTaskOrg: addTaskOrg3, addEvent }; } }); // src/diagrams/timeline/svgDraw.js function wrap2(text3, width3) { text3.each(function() { var text4 = select_default2(this), words = text4.text().split(/(\s+|
    )/).reverse(), word, line2 = [], lineHeight = 1.1, y5 = text4.attr("y"), dy = parseFloat(text4.attr("dy")), tspan = text4.text(null).append("tspan").attr("x", 0).attr("y", y5).attr("dy", dy + "em"); for (let j2 = 0; j2 < words.length; j2++) { word = words[words.length - 1 - j2]; line2.push(word); tspan.text(line2.join(" ").trim()); if (tspan.node().getComputedTextLength() > width3 || word === "
    ") { line2.pop(); tspan.text(line2.join(" ").trim()); if (word === "
    ") { line2 = [""]; } else { line2 = [word]; } tspan = text4.append("tspan").attr("x", 0).attr("y", y5).attr("dy", lineHeight + "em").text(word); } } }); } var MAX_SECTIONS, 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(); MAX_SECTIONS = 12; 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(//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, y5, width3, height2, cut) { return x5 + "," + y5 + " " + (x5 + width3) + "," + y5 + " " + (x5 + width3) + "," + (y5 + height2 - cut) + " " + (x5 + width3 - cut * 1.2) + "," + (y5 + height2) + " " + x5 + "," + (y5 + 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, conf7) { const g2 = elem.append("g"); const rect3 = getNoteRect3(); rect3.x = section.x; rect3.y = section.y; rect3.fill = section.fill; rect3.width = conf7.width; rect3.height = conf7.height; rect3.class = "journey-section section-type-" + section.num; rect3.rx = 3; rect3.ry = 3; drawRect6(g2, rect3); _drawTextCandidateFunc4(conf7)( section.text, g2, rect3.x, rect3.y, rect3.width, rect3.height, { class: "journey-section section-type-" + section.num }, conf7, section.colour ); }, "drawSection"); taskCount2 = -1; drawTask2 = /* @__PURE__ */ __name(function(elem, task, conf7) { const center4 = task.x + conf7.width / 2; const g2 = elem.append("g"); taskCount2++; const maxHeight = 300 + 5 * 30; g2.append("line").attr("id", "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 = conf7.width; rect3.height = conf7.height; rect3.class = "task task-type-" + task.num; rect3.rx = 3; rect3.ry = 3; drawRect6(g2, rect3); _drawTextCandidateFunc4(conf7)( task.task, g2, rect3.x, rect3.y, rect3.width, rect3.height, { class: "task" }, conf7, 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, y5, width3, height2, textAttrs, colour) { const text3 = g2.append("text").attr("x", x5 + width3 / 2).attr("y", y5 + height2 / 2 + 5).style("font-color", colour).style("text-anchor", "middle").text(content); _setTextAttrs(text3, textAttrs); } __name(byText, "byText"); function byTspan(content, g2, x5, y5, width3, height2, textAttrs, conf7, colour) { const { taskFontSize, taskFontFamily } = conf7; const lines = content.split(//gi); for (let i2 = 0; i2 < lines.length; i2++) { const dy = i2 * taskFontSize - taskFontSize * (lines.length - 1) / 2; const text3 = g2.append("text").attr("x", x5 + width3 / 2).attr("y", y5).attr("fill", colour).style("text-anchor", "middle").style("font-size", taskFontSize).style("font-family", taskFontFamily); text3.append("tspan").attr("x", x5 + width3 / 2).attr("dy", dy).text(lines[i2]); text3.attr("y", y5 + height2 / 2).attr("dominant-baseline", "central").attr("alignment-baseline", "central"); _setTextAttrs(text3, textAttrs); } } __name(byTspan, "byTspan"); function byFo(content, g2, x5, y5, width3, height2, textAttrs, conf7) { const body = g2.append("switch"); const f3 = body.append("foreignObject").attr("x", x5).attr("y", y5).attr("width", width3).attr("height", height2).attr("position", "fixed"); const text3 = f3.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%"); text3.append("div").attr("class", "label").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content); byTspan(content, body, x5, y5, width3, height2, textAttrs, conf7); _setTextAttrs(text3, 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(conf7) { return conf7.textPlacement === "fo" ? byFo : conf7.textPlacement === "old" ? byText : byTspan; }; }(); initGraphics2 = /* @__PURE__ */ __name(function(graphics) { graphics.append("defs").append("marker").attr("id", "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, conf7) { const section = fullSection % MAX_SECTIONS - 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 = conf7.fontSize?.replace ? conf7.fontSize.replace("px", "") : conf7.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 + ")"); defaultBkg(bkgElem, node2, section, conf7); return node2; }, "drawNode"); getVirtualNodeHeight = /* @__PURE__ */ __name(function(elem, node2, conf7) { 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 = conf7.fontSize?.replace ? conf7.fontSize.replace("px", "") : conf7.fontSize; textElem.remove(); return bbox.height + fontSize * 1.1 * 0.5 + node2.padding; }, "getVirtualNodeHeight"); defaultBkg = /* @__PURE__ */ __name(function(elem, node2, section) { const rd = 5; elem.append("path").attr("id", "node-" + node2.id).attr("class", "node-bkg node-" + node2.type).attr( "d", `M0 ${node2.height - rd} v${-node2.height + 2 * rd} q0,-5 5,-5 h${node2.width - 2 * rd} q5,0 5,5 v${node2.height - rd} H0 Z` ); 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(text3, id28, version4, diagObj) { const conf7 = getConfig2(); const LEFT_MARGIN2 = conf7.leftMargin ?? 50; log.debug("timeline", diagObj.db); const securityLevel = conf7.securityLevel; let sandboxElement; if (securityLevel === "sandbox") { sandboxElement = select_default2("#i" + id28); } const root4 = securityLevel === "sandbox" ? select_default2(sandboxElement.nodes()[0].contentDocument.body) : select_default2("body"); const svg = root4.select("#" + id28); svg.append("g"); const tasks4 = diagObj.db.getTasks(); const title2 = diagObj.db.getCommonDb().getDiagramTitle(); log.debug("task", tasks4); svgDraw_default4.initGraphics(svg); 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_MARGIN2; 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(svg, sectionNode, conf7); 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(svg, taskNode, conf7); 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(svg, eventNode, conf7); } 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 = svg.append("g"); const node2 = svgDraw_default4.drawNode(sectionNodeWrapper, sectionNode, sectionNumber, conf7); log.debug("sectionNode output", node2); sectionNodeWrapper.attr("transform", `translate(${masterX}, ${sectionBeginY})`); masterY += maxSectionHeight + 50; if (tasksForSection.length > 0) { drawTasks2( svg, tasksForSection, sectionNumber, masterX, masterY, maxTaskHeight, conf7, maxEventCount, maxEventLineLength, maxSectionHeight, false ); } masterX += 200 * Math.max(tasksForSection.length, 1); masterY = sectionBeginY; sectionNumber++; }); } else { hasSections = false; drawTasks2( svg, tasks4, sectionNumber, masterX, masterY, maxTaskHeight, conf7, maxEventCount, maxEventLineLength, maxSectionHeight, true ); } const box = svg.node().getBBox(); log.debug("bounds", box); if (title2) { svg.append("text").text(title2).attr("x", box.width / 2 - LEFT_MARGIN2).attr("font-size", "4ex").attr("font-weight", "bold").attr("y", 20); } depthY = hasSections ? maxSectionHeight + maxTaskHeight + 150 : maxTaskHeight + 100; const lineWrapper = svg.append("g").attr("class", "lineWrapper"); lineWrapper.append("line").attr("x1", LEFT_MARGIN2).attr("y1", depthY).attr("x2", box.width + 3 * LEFT_MARGIN2).attr("y2", depthY).attr("stroke-width", 4).attr("stroke", "black").attr("marker-end", "url(#arrowhead)"); setupGraphViewbox( void 0, svg, conf7.timeline?.padding ?? 50, conf7.timeline?.useMaxWidth ?? false ); }, "draw"); drawTasks2 = /* @__PURE__ */ __name(function(diagram25, tasks4, sectionColor, masterX, masterY, maxTaskHeight, conf7, maxEventCount, maxEventLineLength, maxSectionHeight, isWithoutSections) { 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 = diagram25.append("g").attr("class", "taskWrapper"); const node2 = svgDraw_default4.drawNode(taskWrapper, taskNode, sectionColor, conf7); 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 = diagram25.append("g").attr("class", "lineWrapper"); let lineLength = maxTaskHeight; masterY += 100; lineLength = lineLength + drawEvents(diagram25, task.events, sectionColor, masterX, masterY, conf7); masterY -= 100; lineWrapper.append("line").attr("x1", masterX + 190 / 2).attr("y1", masterY + maxTaskHeight).attr("x2", masterX + 190 / 2).attr( "y2", masterY + maxTaskHeight + (isWithoutSections ? maxTaskHeight : maxSectionHeight) + maxEventLineLength + 120 ).attr("stroke-width", 2).attr("stroke", "black").attr("marker-end", "url(#arrowhead)").attr("stroke-dasharray", "5,5"); } masterX = masterX + 200; if (isWithoutSections && !conf7.timeline?.disableMulticolor) { sectionColor++; } } masterY = masterY - 10; }, "drawTasks"); drawEvents = /* @__PURE__ */ __name(function(diagram25, events, sectionColor, masterX, masterY, conf7) { 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 = diagram25.append("g").attr("class", "eventWrapper"); const node2 = svgDraw_default4.drawNode(eventWrapper, eventNode, sectionColor, conf7); 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/styles.js var genSections, getStyles13, styles_default12; var init_styles12 = __esm({ "src/diagrams/timeline/styles.js"() { "use strict"; init_dist(); genSections = /* @__PURE__ */ __name((options3) => { let sections6 = ""; for (let i2 = 0; i2 < options3.THEME_COLOR_LIMIT; i2++) { options3["lineColor" + i2] = options3["lineColor" + i2] || options3["cScaleInv" + i2]; if (is_dark_default(options3["lineColor" + i2])) { options3["lineColor" + i2] = lighten_default(options3["lineColor" + i2], 20); } else { options3["lineColor" + i2] = darken_default(options3["lineColor" + i2], 20); } } for (let i2 = 0; i2 < options3.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: ${options3["cScale" + i2]}; } .section-${i2 - 1} text { fill: ${options3["cScaleLabel" + i2]}; } .node-icon-${i2 - 1} { font-size: 40px; color: ${options3["cScaleLabel" + i2]}; } .section-edge-${i2 - 1}{ stroke: ${options3["cScale" + i2]}; } .edge-depth-${i2 - 1}{ stroke-width: ${sw}; } .section-${i2 - 1} line { stroke: ${options3["cScaleInv" + i2]} ; stroke-width: 3; } .lineWrapper line{ stroke: ${options3["cScaleLabel" + i2]} ; } .disabled, .disabled circle, .disabled text { fill: lightgray; } .disabled text { fill: #efefef; } `; } return sections6; }, "genSections"); getStyles13 = /* @__PURE__ */ __name((options3) => ` .edge { stroke-width: 3; } ${genSections(options3)} .section-root rect, .section-root path, .section-root circle { fill: ${options3.git0}; } .section-root text { fill: ${options3.gitBranchLabel0}; } .icon-container { height:100%; display: flex; justify-content: center; align-items: center; } .edge { fill: none; } .eventWrapper { filter: brightness(120%); } `, "getStyles"); styles_default12 = getStyles13; } }); // src/diagrams/timeline/timeline-definition.ts var timeline_definition_exports = {}; __export(timeline_definition_exports, { diagram: () => diagram18 }); var diagram18; var init_timeline_definition = __esm({ "src/diagrams/timeline/timeline-definition.ts"() { "use strict"; init_timeline(); init_timelineDb(); init_timelineRenderer(); init_styles12(); diagram18 = { db: timelineDb_exports, renderer: timelineRenderer_default, parser: timeline_default, styles: styles_default12 }; } }); // src/diagrams/mindmap/parser/mindmap.jison var parser17, mindmap_default; var init_mindmap = __esm({ "src/diagrams/mindmap/parser/mindmap.jison"() { "use strict"; parser17 = function() { var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l2) { for (o3 = o3 || {}, l2 = k2.length; l2--; o3[k2[l2]] = 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 parser23 = { 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 parse8(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 lexer3 = 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]; } } lexer3.setInput(input, sharedState.yy); sharedState.yy.lexer = lexer3; sharedState.yy.parser = this; if (typeof lexer3.yylloc == "undefined") { lexer3.yylloc = {}; } var yyloc = lexer3.yylloc; lstack.push(yyloc); var ranges = lexer3.options && lexer3.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 lex2() { var token2; token2 = tstack.pop() || lexer3.lex() || EOF2; if (typeof token2 !== "number") { if (token2 instanceof Array) { tstack = token2; token2 = tstack.pop(); } token2 = self2.symbols_[token2] || token2; } return token2; } __name(lex2, "lex"); var symbol, preErrorSymbol, state5, action, a2, r2, yyval = {}, p3, len, newState2, expected; while (true) { state5 = stack[stack.length - 1]; if (this.defaultActions[state5]) { action = this.defaultActions[state5]; } else { if (symbol === null || typeof symbol == "undefined") { symbol = lex2(); } action = table[state5] && table[state5][symbol]; } if (typeof action === "undefined" || !action.length || !action[0]) { var errStr = ""; expected = []; for (p3 in table[state5]) { if (this.terminals_[p3] && p3 > TERROR) { expected.push("'" + this.terminals_[p3] + "'"); } } if (lexer3.showPosition) { errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer3.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: lexer3.match, token: this.terminals_[symbol] || symbol, line: lexer3.yylineno, loc: yyloc, expected }); } if (action[0] instanceof Array && action.length > 1) { throw new Error("Parse Error: multiple actions possible at state: " + state5 + ", token: " + symbol); } switch (action[0]) { case 1: stack.push(symbol); vstack.push(lexer3.yytext); lstack.push(lexer3.yylloc); stack.push(action[1]); symbol = null; if (!preErrorSymbol) { yyleng = lexer3.yyleng; yytext = lexer3.yytext; yylineno = lexer3.yylineno; yyloc = lexer3.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 lexer2 = /* @__PURE__ */ function() { var lexer3 = { 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(match2, 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 = match2[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 + match2[0].length }; this.yytext += match2[0]; this.match += match2[0]; this.matches = match2; 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(match2[0].length); this.matched += match2[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, match2, tempMatch, index; if (!this._more) { this.yytext = ""; this.match = ""; } var rules = this._currentRules(); for (var i2 = 0; i2 < rules.length; i2++) { tempMatch = this._input.match(this.rules[rules[i2]]); if (tempMatch && (!match2 || tempMatch[0].length > match2[0].length)) { match2 = tempMatch; index = i2; if (this.options.backtrack_lexer) { token2 = this.test_match(tempMatch, rules[i2]); if (token2 !== false) { return token2; } else if (this._backtrack) { match2 = false; continue; } else { return false; } } else if (!this.options.flex) { break; } } } if (match2) { token2 = this.test_match(match2, rules[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 lex2() { 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 lexer3; }(); parser23.lexer = lexer2; function Parser3() { this.yy = {}; } __name(Parser3, "Parser"); Parser3.prototype = parser23; parser23.Parser = Parser3; return new Parser3(); }(); parser17.parser = parser17; mindmap_default = parser17; } }); // src/diagrams/mindmap/mindmapDb.ts var nodes2, cnt2, elements2, clear21, getParent, getMindmap, addNode, nodeType, getType, setElementForId, decorateNode, type2Str, getLogger, getElementById, db4, mindmapDb_default; var init_mindmapDb = __esm({ "src/diagrams/mindmap/mindmapDb.ts"() { "use strict"; init_diagramAPI(); init_common(); init_logger(); init_defaultConfig(); nodes2 = []; cnt2 = 0; elements2 = {}; clear21 = /* @__PURE__ */ __name(() => { nodes2 = []; cnt2 = 0; elements2 = {}; }, "clear"); getParent = /* @__PURE__ */ __name(function(level) { for (let i2 = nodes2.length - 1; i2 >= 0; i2--) { if (nodes2[i2].level < level) { return nodes2[i2]; } } return null; }, "getParent"); getMindmap = /* @__PURE__ */ __name(() => { return nodes2.length > 0 ? nodes2[0] : null; }, "getMindmap"); addNode = /* @__PURE__ */ __name((level, id28, descr, type3) => { log.info("addNode", level, id28, descr, type3); const conf7 = getConfig2(); let padding2 = conf7.mindmap?.padding ?? defaultConfig_default.mindmap.padding; switch (type3) { case nodeType.ROUNDED_RECT: case nodeType.RECT: case nodeType.HEXAGON: padding2 *= 2; } const node2 = { id: cnt2++, nodeId: sanitizeText(id28, conf7), level, descr: sanitizeText(descr, conf7), type: type3, children: [], width: conf7.mindmap?.maxNodeWidth ?? defaultConfig_default.mindmap.maxNodeWidth, padding: padding2 }; const parent4 = getParent(level); if (parent4) { parent4.children.push(node2); nodes2.push(node2); } else { if (nodes2.length === 0) { nodes2.push(node2); } else { throw new Error( 'There can be only one root. No parent could be found for ("' + node2.descr + '")' ); } } }, "addNode"); nodeType = { 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 nodeType.RECT; case "(": return endStr === ")" ? nodeType.ROUNDED_RECT : nodeType.CLOUD; case "((": return nodeType.CIRCLE; case ")": return nodeType.CLOUD; case "))": return nodeType.BANG; case "{{": return nodeType.HEXAGON; default: return nodeType.DEFAULT; } }, "getType"); setElementForId = /* @__PURE__ */ __name((id28, element3) => { elements2[id28] = element3; }, "setElementForId"); decorateNode = /* @__PURE__ */ __name((decoration) => { if (!decoration) { return; } const config6 = getConfig2(); const node2 = nodes2[nodes2.length - 1]; if (decoration.icon) { node2.icon = sanitizeText(decoration.icon, config6); } if (decoration.class) { node2.class = sanitizeText(decoration.class, config6); } }, "decorateNode"); type2Str = /* @__PURE__ */ __name((type3) => { switch (type3) { case nodeType.DEFAULT: return "no-border"; case nodeType.RECT: return "rect"; case nodeType.ROUNDED_RECT: return "rounded-rect"; case nodeType.CIRCLE: return "circle"; case nodeType.CLOUD: return "cloud"; case nodeType.BANG: return "bang"; case nodeType.HEXAGON: return "hexgon"; default: return "no-border"; } }, "type2Str"); getLogger = /* @__PURE__ */ __name(() => log, "getLogger"); getElementById = /* @__PURE__ */ __name((id28) => elements2[id28], "getElementById"); db4 = { clear: clear21, addNode, getMindmap, nodeType, getType, setElementForId, decorateNode, type2Str, getLogger, getElementById }; mindmapDb_default = db4; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/cytoscape/dist/cytoscape.esm.mjs function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(obj2) { return typeof obj2; } : function(obj2) { return obj2 && "function" == typeof Symbol && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; }, _typeof(obj); } function _classCallCheck(instance2, Constructor) { if (!(instance2 instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i2 = 0; i2 < props.length; i2++) { var descriptor = props[i2]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } function _defineProperty$1(obj, key, value2) { if (key in obj) { Object.defineProperty(obj, key, { value: value2, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value2; } return obj; } function _slicedToArray(arr, i2) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i2) || _unsupportedIterableToArray(arr, i2) || _nonIterableRest(); } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _iterableToArrayLimit(arr, i2) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i2 && _arr.length === i2) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _unsupportedIterableToArray(o2, minLen) { if (!o2) return; if (typeof o2 === "string") return _arrayLikeToArray(o2, minLen); var n2 = Object.prototype.toString.call(o2).slice(8, -1); if (n2 === "Object" && o2.constructor) n2 = o2.constructor.name; if (n2 === "Map" || n2 === "Set") return Array.from(o2); if (n2 === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n2)) return _arrayLikeToArray(o2, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i2 = 0, arr2 = new Array(len); i2 < len; i2++) arr2[i2] = arr[i2]; return arr2; } function _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 _createForOfIteratorHelper(o2, allowArrayLike) { var it = typeof Symbol !== "undefined" && o2[Symbol.iterator] || o2["@@iterator"]; if (!it) { if (Array.isArray(o2) || (it = _unsupportedIterableToArray(o2)) || allowArrayLike && o2 && typeof o2.length === "number") { if (it) o2 = it; var i2 = 0; var F2 = /* @__PURE__ */ __name(function() { }, "F"); return { s: F2, n: /* @__PURE__ */ __name(function() { if (i2 >= o2.length) return { done: true }; return { done: false, value: o2[i2++] }; }, "n"), e: /* @__PURE__ */ __name(function(e3) { throw e3; }, "e"), f: F2 }; } 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 normalCompletion = true, didErr = false, err; return { s: /* @__PURE__ */ __name(function() { it = it.call(o2); }, "s"), n: /* @__PURE__ */ __name(function() { var step3 = it.next(); normalCompletion = step3.done; return step3; }, "n"), e: /* @__PURE__ */ __name(function(e3) { didErr = true; err = e3; }, "e"), f: /* @__PURE__ */ __name(function() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } }, "f") }; } function isObject3(value2) { var type3 = typeof value2; return value2 != null && (type3 == "object" || type3 == "function"); } function createCommonjsModule(fn3, module2) { return module2 = { exports: {} }, fn3(module2, module2.exports), module2.exports; } 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(string3) + 1).replace(reTrimStart2, "") : string3; } function getRawTag2(value2) { var isOwn = hasOwnProperty$4.call(value2, symToStringTag$1), tag2 = value2[symToStringTag$1]; try { value2[symToStringTag$1] = void 0; var unmasked = true; } catch (e3) { } var result = nativeObjectToString$1.call(value2); if (unmasked) { if (isOwn) { value2[symToStringTag$1] = tag2; } else { delete value2[symToStringTag$1]; } } return result; } function objectToString2(value2) { return nativeObjectToString3.call(value2); } function baseGetTag2(value2) { if (value2 == null) { return value2 === void 0 ? undefinedTag2 : nullTag2; } return symToStringTag3 && symToStringTag3 in Object(value2) ? _getRawTag(value2) : _objectToString(value2); } function isObjectLike2(value2) { return value2 != null && typeof value2 == "object"; } function isSymbol2(value2) { return typeof value2 == "symbol" || isObjectLike_1(value2) && _baseGetTag(value2) == symbolTag5; } function toNumber2(value2) { if (typeof value2 == "number") { return value2; } if (isSymbol_1(value2)) { return NAN2; } if (isObject_12(value2)) { var other = typeof value2.valueOf == "function" ? value2.valueOf() : value2; value2 = isObject_12(other) ? other + "" : other; } if (typeof value2 != "string") { return value2 === 0 ? value2 : +value2; } value2 = _baseTrim(value2); var isBinary2 = reIsBinary2.test(value2); return isBinary2 || reIsOctal2.test(value2) ? freeParseInt2(value2.slice(2), isBinary2 ? 2 : 8) : reIsBadHex2.test(value2) ? NAN2 : +value2; } function debounce(func, wait, options3) { var lastArgs, lastThis, maxWait, result, timerId, lastCallTime, lastInvokeTime = 0, leading = false, maxing = false, trailing = true; if (typeof func != "function") { throw new TypeError(FUNC_ERROR_TEXT$1); } wait = toNumber_1(wait) || 0; if (isObject_12(options3)) { leading = !!options3.leading; maxing = "maxWait" in options3; maxWait = maxing ? nativeMax6(toNumber_1(options3.maxWait) || 0, wait) : maxWait; trailing = "trailing" in options3 ? !!options3.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 = now_1(); 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(now_1()); } __name(flush, "flush"); function debounced() { var time4 = now_1(), 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; } 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 isKey2(value2, object3) { if (isArray_1(value2)) { return false; } var type3 = typeof value2; if (type3 == "number" || type3 == "symbol" || type3 == "boolean" || value2 == null || isSymbol_1(value2)) { return true; } return reIsPlainProp2.test(value2) || !reIsDeepProp2.test(value2) || object3 != null && value2 in Object(object3); } function isFunction2(value2) { if (!isObject_12(value2)) { return false; } var tag2 = _baseGetTag(value2); return tag2 == funcTag4 || tag2 == genTag3 || tag2 == asyncTag2 || tag2 == proxyTag2; } function isMasked2(func) { return !!maskSrcKey2 && maskSrcKey2 in func; } function toSource2(func) { if (func != null) { try { return funcToString$1.call(func); } catch (e3) { } try { return func + ""; } catch (e3) { } } return ""; } function baseIsNative2(value2) { if (!isObject_12(value2) || _isMasked(value2)) { return false; } var pattern = isFunction_1(value2) ? reIsNative2 : reIsHostCtor2; return pattern.test(_toSource(value2)); } function getValue$1(object3, key) { return object3 == null ? void 0 : object3[key]; } function getNative2(object3, key) { var value2 = _getValue(object3, key); return _baseIsNative(value2) ? value2 : void 0; } function hashClear2() { this.__data__ = _nativeCreate ? _nativeCreate(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 data5 = this.__data__; if (_nativeCreate) { var result = data5[key]; return result === HASH_UNDEFINED$1 ? void 0 : result; } return hasOwnProperty$2.call(data5, key) ? data5[key] : void 0; } function hashHas2(key) { var data5 = this.__data__; return _nativeCreate ? data5[key] !== void 0 : hasOwnProperty$1.call(data5, key); } function hashSet2(key, value2) { var data5 = this.__data__; this.size += this.has(key) ? 0 : 1; data5[key] = _nativeCreate && value2 === void 0 ? HASH_UNDEFINED4 : value2; return this; } function Hash2(entries) { var index = -1, length2 = entries == null ? 0 : entries.length; this.clear(); while (++index < length2) { var entry = entries[index]; this.set(entry[0], entry[1]); } } function listCacheClear2() { this.__data__ = []; this.size = 0; } function eq2(value2, other) { return value2 === other || value2 !== value2 && other !== other; } function assocIndexOf2(array4, key) { var length2 = array4.length; while (length2--) { if (eq_1(array4[length2][0], key)) { return length2; } } return -1; } function listCacheDelete2(key) { var data5 = this.__data__, index = _assocIndexOf(data5, key); if (index < 0) { return false; } var lastIndex = data5.length - 1; if (index == lastIndex) { data5.pop(); } else { splice2.call(data5, index, 1); } --this.size; return true; } function listCacheGet2(key) { var data5 = this.__data__, index = _assocIndexOf(data5, key); return index < 0 ? void 0 : data5[index][1]; } function listCacheHas2(key) { return _assocIndexOf(this.__data__, key) > -1; } function listCacheSet2(key, value2) { var data5 = this.__data__, index = _assocIndexOf(data5, key); if (index < 0) { ++this.size; data5.push([key, value2]); } else { data5[index][1] = value2; } return this; } function ListCache2(entries) { var index = -1, length2 = entries == null ? 0 : entries.length; this.clear(); while (++index < length2) { var entry = entries[index]; this.set(entry[0], entry[1]); } } function mapCacheClear2() { this.size = 0; this.__data__ = { "hash": new _Hash(), "map": new (_Map || _ListCache)(), "string": new _Hash() }; } function isKeyable2(value2) { var type3 = typeof value2; return type3 == "string" || type3 == "number" || type3 == "symbol" || type3 == "boolean" ? value2 !== "__proto__" : value2 === null; } function getMapData2(map5, key) { var data5 = map5.__data__; return _isKeyable(key) ? data5[typeof key == "string" ? "string" : "hash"] : data5.map; } function mapCacheDelete2(key) { var result = _getMapData(this, key)["delete"](key); this.size -= result ? 1 : 0; return result; } function mapCacheGet2(key) { return _getMapData(this, key).get(key); } function mapCacheHas2(key) { return _getMapData(this, key).has(key); } function mapCacheSet2(key, value2) { var data5 = _getMapData(this, key), size5 = data5.size; data5.set(key, value2); this.size += data5.size == size5 ? 0 : 1; return this; } function MapCache2(entries) { var index = -1, length2 = entries == null ? 0 : entries.length; this.clear(); while (++index < length2) { var entry = entries[index]; this.set(entry[0], entry[1]); } } function memoize3(func, resolver3) { if (typeof func != "function" || resolver3 != null && typeof resolver3 != "function") { throw new TypeError(FUNC_ERROR_TEXT3); } 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 (memoize3.Cache || _MapCache)(); return memoized; } function memoizeCapped2(func) { var result = memoize_1(func, function(key) { if (cache3.size === MAX_MEMOIZE_SIZE2) { cache3.clear(); } return key; }); var cache3 = result.cache; return result; } 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_1(value2)) { return _arrayMap(value2, baseToString2) + ""; } if (isSymbol_1(value2)) { return symbolToString2 ? symbolToString2.call(value2) : ""; } var result = value2 + ""; return result == "0" && 1 / value2 == -INFINITY$1 ? "-0" : result; } function toString$1(value2) { return value2 == null ? "" : _baseToString(value2); } function castPath2(value2, object3) { if (isArray_1(value2)) { return value2; } return _isKey(value2, object3) ? [value2] : _stringToPath(toString_1(value2)); } function toKey2(value2) { if (typeof value2 == "string" || isSymbol_1(value2)) { return value2; } var result = value2 + ""; return result == "0" && 1 / value2 == -INFINITY5 ? "-0" : result; } function baseGet2(object3, path4) { path4 = _castPath(path4, object3); var index = 0, length2 = path4.length; while (object3 != null && index < length2) { object3 = object3[_toKey(path4[index++])]; } return index && index == length2 ? object3 : void 0; } function get5(object3, path4, defaultValue) { var result = object3 == null ? void 0 : _baseGet(object3, path4); return result === void 0 ? defaultValue : result; } function baseAssignValue2(object3, key, value2) { if (key == "__proto__" && _defineProperty) { _defineProperty(object3, key, { "configurable": true, "enumerable": true, "value": value2, "writable": true }); } else { object3[key] = value2; } } function assignValue2(object3, key, value2) { var objValue = object3[key]; if (!(hasOwnProperty19.call(object3, key) && eq_1(objValue, value2)) || value2 === void 0 && !(key in object3)) { _baseAssignValue(object3, key, value2); } } 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 baseSet2(object3, path4, value2, customizer) { if (!isObject_12(object3)) { return object3; } path4 = _castPath(path4, object3); var index = -1, length2 = path4.length, lastIndex = length2 - 1, nested = object3; while (nested != null && ++index < length2) { var key = _toKey(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_12(objValue) ? objValue : _isIndex(path4[index + 1]) ? [] : {}; } } _assignValue(nested, key, newValue); nested = nested[key]; } return object3; } function set5(object3, path4, value2) { return object3 == null ? object3 : _baseSet(object3, path4, value2); } function copyArray3(source, array4) { var index = -1, length2 = source.length; array4 || (array4 = Array(length2)); while (++index < length2) { array4[index] = source[index]; } return array4; } function toPath(value2) { if (isArray_1(value2)) { return _arrayMap(value2, _toKey); } return isSymbol_1(value2) ? [value2] : _copyArray(_stringToPath(toString_1(value2))); } function forEachCompound(eles, fn3, includeSelf, recursiveStep) { var q2 = []; 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) { q2.push(ele); } else if (hasCompounds) { recursiveStep(q2, did, ele); } } while (q2.length > 0) { var _ele = q2.shift(); fn3(_ele); did.add(_ele.id()); if (hasCompounds) { recursiveStep(q2, did, _ele); } } return eles; } function addChildren(q2, 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())) { q2.push(child); } } } } function addParent(q2, did, ele) { if (ele.isChild()) { var parent4 = ele._private.parent; if (!did.has(parent4.id())) { q2.push(parent4); } } } function addParentAndChildren(q2, did, ele) { addParent(q2, did, ele); addChildren(q2, 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 nodes7 = this.nodes(); for (var i2 = 0; i2 < nodes7.length; i2++) { var ele = nodes7[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 Emitter2() { 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 = hashString(key); return /* @__PURE__ */ __name(function cachedStyleFunction(ele) { return styleCache(key, fn3, ele); }, "cachedStyleFunction"); } function cachePrototypeStyleFunction(key, fn3) { key = hashString(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 data5 = args[0]; var handler = args[1]; this.on(params.event, data5, 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 elements4 = []; var cy = this._private.cy; var p3 = params || {}; if (string(otherNodes)) { otherNodes = cy.$(otherNodes); } for (var h2 = 0; h2 < otherNodes.length; h2++) { var edges5 = otherNodes[h2]._private.edges; for (var i2 = 0; i2 < edges5.length; i2++) { var edge = edges5[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; } } elements4.push(edge); } } return this.spawn(elements4, true); }, "edgesWithImpl"); } function defineParallelEdgesFunction(params) { var defaults4 = { codirected: false }; params = extend4({}, defaults4, params); return /* @__PURE__ */ __name(function parallelEdgesImpl(selector) { var elements4 = []; var edges5 = this.edges(); var p3 = params; for (var i2 = 0; i2 < edges5.length; i2++) { var edge1 = edges5[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 j2 = 0; j2 < srcEdges1.length; j2++) { var edge2 = srcEdges1[j2]; 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)) { elements4.push(edge2); } } } return this.spawn(elements4, 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 B2(aA1, aA2) { return 3 * aA2 - 6 * aA1; } __name(B2, "B"); function C2(aA1) { return 3 * aA1; } __name(C2, "C"); function calcBezier(aT, aA1, aA2) { return ((A2(aA1, aA2) * aT + B2(aA1, aA2)) * aT + C2(aA1)) * aT; } __name(calcBezier, "calcBezier"); function getSlope(aT, aA1, aA2) { return 3 * A2(aA1, aA2) * aT * aT + 2 * B2(aA1, aA2) * aT + C2(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 f3 = /* @__PURE__ */ __name(function f4(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"); f3.getControlPoints = function() { return [{ x: mX1, y: mY1 }, { x: mX2, y: mY2 }]; }; var str2 = "generateBezier(" + [mX1, mY1, mX2, mY2] + ")"; f3.toString = function() { return str2; }; return f3; } 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, now4, 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 = (now4 - 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, now4, isCore) { var ani_p = ani._private; ani_p.started = true; ani_p.startTime = now4 - ani_p.progress * ani_p.duration; } function stepAll(now4, 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 j2 = _callbacks.length - 1; j2 >= 0; j2--) { var cb = _callbacks[j2]; 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, now4); } step$1(ele2, ani, now4, isCore); if (ani_p.applying) { ani_p.applying = false; } callbacks(ani_p.frames); if (ani_p.step != null) { ani_p.step(now4); } 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(options3) { this.options = extend4({}, defaults$7, deprecatedOptionDefaults, options3); } function CircleLayout(options3) { this.options = extend4({}, defaults$6, options3); } function ConcentricLayout(options3) { this.options = extend4({}, defaults$5, options3); } function CoseLayout(options3) { this.options = extend4({}, defaults$4, options3); this.options.layout = this; var nodes7 = this.options.eles.nodes(); var edges5 = this.options.eles.edges(); var notEdges = edges5.filter(function(e3) { var sourceId = e3.source().data("id"); var targetId = e3.target().data("id"); var hasSource = nodes7.some(function(n2) { return n2.data("id") === sourceId; }); var hasTarget = nodes7.some(function(n2) { return n2.data("id") === targetId; }); return !hasSource || !hasTarget; }); this.options.eles = this.options.eles.not(notEdges); } function GridLayout(options3) { this.options = extend4({}, defaults$3, options3); } function NullLayout(options3) { this.options = extend4({}, defaults$2, options3); } function PresetLayout(options3) { this.options = extend4({}, defaults$1, options3); } function RandomLayout(options3) { this.options = extend4({}, defaults3, options3); } function NullRenderer(options3) { this.options = options3; 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: y3, radius: cRadius, startX, startY, stopX, stopY, startAngle: v1.ang + Math.PI / 2 * radDirection, endAngle: v2.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 y5 = pts2[i2 + 1]; retPts.push({ x: x5, y: y5 }); } 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 circle3(context, rx, ry, r2) { context.arc(rx, ry, r2, 0, Math.PI * 2, false); } function roundRect(ctx, x5, y5, width3, height2) { var radius2 = arguments.length > 5 && arguments[5] !== void 0 ? arguments[5] : 5; var stroke = arguments.length > 6 ? arguments[6] : void 0; ctx.beginPath(); ctx.moveTo(x5 + radius2, y5); ctx.lineTo(x5 + width3 - radius2, y5); ctx.quadraticCurveTo(x5 + width3, y5, x5 + width3, y5 + radius2); ctx.lineTo(x5 + width3, y5 + height2 - radius2); ctx.quadraticCurveTo(x5 + width3, y5 + height2, x5 + width3 - radius2, y5 + height2); ctx.lineTo(x5 + radius2, y5 + height2); ctx.quadraticCurveTo(x5, y5 + height2, x5, y5 + height2 - radius2); ctx.lineTo(x5, y5 + radius2); ctx.quadraticCurveTo(x5, y5, x5 + radius2, y5); ctx.closePath(); if (stroke) ctx.stroke(); else ctx.fill(); } 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(options3, canvas, mimeType) { var getB64Uri = /* @__PURE__ */ __name(function getB64Uri2() { return canvas.toDataURL(mimeType, options3.quality); }, "getB64Uri"); switch (options3.output) { case "blob-promise": return new Promise$1(function(resolve3, reject3) { try { canvas.toBlob(function(blob) { if (blob != null) { resolve3(blob); } else { reject3(new Error("`canvas.toBlob()` sent a null value in its callback")); } }, mimeType, options3.quality); } catch (err) { reject3(err); } }); case "blob": return b64ToBlob(b64UriToB64(getB64Uri()), mimeType); case "base64": return b64UriToB64(getB64Uri()); case "base64uri": default: return getB64Uri(); } } function CanvasRenderer(options3) { var r2 = this; var containerWindow = r2.cy.window(); var document2 = containerWindow.document; 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 = options3.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"); r2.data.contexts[i2] = canvas.getContext("2d"); 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"); 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, y5) { var rs = ele[0]._private.rscratch; return { x: rs[x5], y: rs[y5] }; }, "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; break; case "right": p3.x = 0; break; } switch (ele.pstyle("text-valign").value) { case "top": p3.y = -bb.h; break; case "bottom": p3.y = 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); } 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(options3) { this.options = options3; registrant.call(this, options3); if (!plainObject(this._private)) { this._private = {}; } this._private.cy = options3.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(layout6) { return layout6._private.cy; }, "getCy"); var emitterOpts = { addEventFields: /* @__PURE__ */ __name(function addEventFields4(layout6, evt) { evt.layout = layout6; evt.cy = getCy(layout6); evt.target = layout6; }, "addEventFields"), bubble: /* @__PURE__ */ __name(function bubble3() { return true; }, "bubble"), parent: /* @__PURE__ */ __name(function parent4(layout6) { return getCy(layout6); }, "parent") }; extend4(layoutProto, { createEmitter: /* @__PURE__ */ __name(function createEmitter3() { this._private.emitter = new Emitter2(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, integer2, htmlElement, elementOrCollection, element, collection, core2, stylesheet, event, emptyString, domElement, boundingBox, promise, ms, memoize$1, camel2dash, dash2camel, prependCamel, capitalize, number6, rgba3, rgbaNoBackRefs, hsla2, hslaNoBackRefs, hex3, hex6, ascending3, descending2, extend4, hex2tuple, hsl2tuple, rgb2tuple, colorname2tuple, color2tuple, colors, setMap, getMap, isObject_12, commonjsGlobal, freeGlobal2, _freeGlobal, freeSelf2, root3, _root, now3, now_1, reWhitespace2, _trimmedEndIndex, reTrimStart2, _baseTrim, Symbol$1, _Symbol, objectProto$5, hasOwnProperty$4, nativeObjectToString$1, symToStringTag$1, _getRawTag, objectProto$4, nativeObjectToString3, _objectToString, nullTag2, undefinedTag2, symToStringTag3, _baseGetTag, isObjectLike_1, symbolTag5, isSymbol_1, NAN2, reIsBadHex2, reIsBinary2, reIsOctal2, freeParseInt2, toNumber_1, FUNC_ERROR_TEXT$1, nativeMax6, nativeMin, debounce_1, performance2, pnow, raf, requestAnimationFrame2, performanceNow, DEFAULT_HASH_SEED, K3, DEFAULT_HASH_SEED_ALT, hashIterableInts, hashInt, hashIntAlt, combineHashes, combineHashesArray, hashArrays, hashIntsArray, hashString, hashStrings, hashStringsArray, warningsEnabled, warnSupported, traceSupported, MAX_INT$1, trueify, falsify, zeroify, noop$1, error, warnings, warn, clone3, copy3, copyArray$1, uuid, _staticEmptyObject, staticEmptyObject, defaults$g, removeFromArray, clearArray, push, getPrefixedProperty, setPrefixedProperty, ObjectMap, Map$2, undef, ObjectSet, Set$1, Element, defineSearch, elesfn$v, heap$1, heap, dijkstraDefaults, elesfn$u, elesfn$t, aStarDefaults, elesfn$s, floydWarshallDefaults, elesfn$r, bellmanFordDefaults, elesfn$q, sqrt2, collapse, contractUntil, elesfn$p, copyPosition, modelToRenderedPosition, renderedToModelPosition, array2point, min5, max5, mean, median, deg2rad, getAngleFromDisp, log22, signum, dist, sqdist, inPlaceSumNormalize, qbezierAt, qbezierPtAt, lineAt, bound, makeBoundingBox, copyBoundingBox, clearBoundingBox, shiftBoundingBox, updateBoundingBox, expandBoundingBoxByPoint, expandBoundingBox, expandBoundingBoxSides, assignBoundingBox, boundingBoxesIntersect, inBoundingBox, pointInBoundingBox, boundingBoxInBoundingBox, roundRectangleIntersectLine, inLineVicinity, inBezierVicinity, solveQuadratic, solveCubic, sqdistToQuadraticBezier, sqdistToFiniteLine, pointInsidePolygonPoints, pointInsidePolygon, pointInsideRoundPolygon, joinLines, expandPolygon, intersectLineEllipse, checkInEllipse, intersectLineCircle, midOfThree, finiteLinesIntersect, 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, identity5, 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, setOptions6, getSimilarity2, getPreference, findExemplars, assignClusters, assign4, 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, isArray2, isArray_1, reIsDeepProp2, reIsPlainProp2, _isKey, asyncTag2, funcTag4, genTag3, proxyTag2, isFunction_1, coreJsData2, _coreJsData, maskSrcKey2, _isMasked, funcProto$1, funcToString$1, _toSource, reRegExpChar2, reIsHostCtor2, funcProto4, objectProto$3, funcToString4, hasOwnProperty$3, reIsNative2, _baseIsNative, _getValue, _getNative, nativeCreate2, _nativeCreate, _hashClear, _hashDelete, HASH_UNDEFINED$1, objectProto$2, hasOwnProperty$2, _hashGet, objectProto$1, hasOwnProperty$1, _hashHas, HASH_UNDEFINED4, _hashSet, _Hash, _listCacheClear, eq_1, _assocIndexOf, arrayProto2, splice2, _listCacheDelete, _listCacheGet, _listCacheHas, _listCacheSet, _ListCache, Map$1, _Map, _mapCacheClear, _isKeyable, _getMapData, _mapCacheDelete, _mapCacheGet, _mapCacheHas, _mapCacheSet, _MapCache, FUNC_ERROR_TEXT3, memoize_1, MAX_MEMOIZE_SIZE2, _memoizeCapped, rePropName2, reEscapeChar2, stringToPath2, _stringToPath, _arrayMap, INFINITY$1, symbolProto4, symbolToString2, _baseToString, toString_1, _castPath, INFINITY5, _toKey, _baseGet, get_1, defineProperty2, _defineProperty, _baseAssignValue, objectProto22, hasOwnProperty19, _assignValue, MAX_SAFE_INTEGER3, reIsUint2, _isIndex, _baseSet, set_1, _copyArray, toPath_1, define$2, define$1, define2, elesfn$i, elesfn$h, tokens, newQuery, Type3, stateSelectors, lookup, stateSelectorMatches, stateSelectorRegex, cleanMetaChars, replaceLastQuery, exprs, consumeExpr, consumeWhitespace, parse3, toString4, 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, boundingBoxImpl, getKey, getBoundingBoxPosKey, cachedBoundingBoxImpl, defBbOpts, defBbOptsKey, filledBbOpts, bounds3, 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, Style2, 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, noop4, throwImgErr, BRp$f, BRp$e, BRp$d, x3, y3, v1, v2, sinA, sinA90, radDirection, drawDirection, angle, halfAngle, cRadius, lenOut, radius, limit, startX, startY, stopX, stopY, lastPoint, asVec, invertVec, calcCornerArc, 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, 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, useHighQualityEleTxrReqs, LayeredTextureCache, LTCp, layerIdPool, MAX_INT, CRp$a, impl, CRp$9, getZeroRotation, getLabelRotation, getSourceLabelRotation, getTargetLabelRotation, getOpacity, getTextOpacity, CRp$8, drawEdgeOverlayUnderlay, CRp$7, CRp$6, CRp$5, drawNodeOverlayUnderlay, CRp$4, motionBlurDelay, CRp$3, sin0, cos0, sin2, cos2, ellipseStepSize, i2, CRp$2, CRp$1, CR, CRp, pathsImpld, renderer5, incExts, extensions, modules, extension2, Stylesheet, sheetfn, version3, cytoscape2; var init_cytoscape_esm = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/cytoscape/dist/cytoscape.esm.mjs"() { "use strict"; __name(_typeof, "_typeof"); __name(_classCallCheck, "_classCallCheck"); __name(_defineProperties, "_defineProperties"); __name(_createClass, "_createClass"); __name(_defineProperty$1, "_defineProperty$1"); __name(_slicedToArray, "_slicedToArray"); __name(_arrayWithHoles, "_arrayWithHoles"); __name(_iterableToArrayLimit, "_iterableToArrayLimit"); __name(_unsupportedIterableToArray, "_unsupportedIterableToArray"); __name(_arrayLikeToArray, "_arrayLikeToArray"); __name(_nonIterableRest, "_nonIterableRest"); __name(_createForOfIteratorHelper, "_createForOfIteratorHelper"); _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"); integer2 = /* @__PURE__ */ __name(function integer3(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"); memoize$1 = /* @__PURE__ */ __name(function memoize2(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 memoizedFn2() { var self2 = this; var args = arguments; var ret; var k2 = keyFn.apply(self2, args); var cache3 = memoizedFn2.cache; if (!(ret = cache3[k2])) { ret = cache3[k2] = fn3.apply(self2, args); } return ret; }, "memoizedFn"); memoizedFn.cache = {}; return memoizedFn; }, "memoize"); camel2dash = memoize$1(function(str2) { return str2.replace(/([A-Z])/g, function(v3) { return "-" + v3.toLowerCase(); }); }); dash2camel = memoize$1(function(str2) { return str2.replace(/(-\w)/g, function(v3) { return v3[1].toUpperCase(); }); }); prependCamel = memoize$1(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"); 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, b2) { if (a2 < b2) { return -1; } else if (a2 > b2) { return 1; } else { return 0; } }, "ascending"); descending2 = /* @__PURE__ */ __name(function descending3(a2, b2) { return -1 * ascending3(a2, b2); }, "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 j2 = 0; j2 < keys3.length; j2++) { var k2 = keys3[j2]; 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, b2; var base = 16; if (shortHex) { r2 = parseInt(hex2[1] + hex2[1], base); g2 = parseInt(hex2[2] + hex2[2], base); b2 = parseInt(hex2[3] + hex2[3], base); } else { r2 = parseInt(hex2[1] + hex2[2], base); g2 = parseInt(hex2[3] + hex2[4], base); b2 = parseInt(hex2[5] + hex2[6], base); } return [r2, g2, b2]; }, "hex2tuple"); hsl2tuple = /* @__PURE__ */ __name(function hsl2tuple2(hsl2) { var ret; var h2, s2, l2, a2, r2, g2, b2; function hue2rgb(p4, q3, t4) { if (t4 < 0) t4 += 1; if (t4 > 1) t4 -= 1; if (t4 < 1 / 6) return p4 + (q3 - p4) * 6 * t4; if (t4 < 1 / 2) return q3; if (t4 < 2 / 3) return p4 + (q3 - p4) * (2 / 3 - t4) * 6; return p4; } __name(hue2rgb, "hue2rgb"); var m2 = new RegExp("^" + hsla2 + "$").exec(hsl2); if (m2) { h2 = parseInt(m2[1]); if (h2 < 0) { h2 = (360 - -1 * h2 % 360) % 360; } else if (h2 > 360) { h2 = h2 % 360; } h2 /= 360; s2 = parseFloat(m2[2]); if (s2 < 0 || s2 > 100) { return; } s2 = s2 / 100; l2 = parseFloat(m2[3]); if (l2 < 0 || l2 > 100) { return; } l2 = l2 / 100; a2 = m2[4]; if (a2 !== void 0) { a2 = parseFloat(a2); if (a2 < 0 || a2 > 1) { return; } } if (s2 === 0) { r2 = g2 = b2 = Math.round(l2 * 255); } else { var q2 = l2 < 0.5 ? l2 * (1 + s2) : l2 + s2 - l2 * s2; var p3 = 2 * l2 - q2; r2 = Math.round(255 * hue2rgb(p3, q2, h2 + 1 / 3)); g2 = Math.round(255 * hue2rgb(p3, q2, h2)); b2 = Math.round(255 * hue2rgb(p3, q2, h2 - 1 / 3)); } ret = [r2, g2, b2, a2]; } return ret; }, "hsl2tuple"); rgb2tuple = /* @__PURE__ */ __name(function rgb2tuple2(rgb2) { var ret; var m2 = new RegExp("^" + rgba3 + "$").exec(rgb2); if (m2) { ret = []; var isPct = []; for (var i2 = 1; i2 <= 3; i2++) { var channel2 = m2[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 = m2[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(options3) { var obj = options3.map; var keys3 = options3.keys; var l2 = keys3.length; for (var i2 = 0; i2 < l2; 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] = options3.value; } } }, "setMap"); getMap = /* @__PURE__ */ __name(function getMap2(options3) { var obj = options3.map; var keys3 = options3.keys; var l2 = keys3.length; for (var i2 = 0; i2 < l2; 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"); __name(isObject3, "isObject"); isObject_12 = isObject3; commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {}; __name(createCommonjsModule, "createCommonjsModule"); freeGlobal2 = typeof commonjsGlobal == "object" && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal; _freeGlobal = freeGlobal2; freeSelf2 = typeof self == "object" && self && self.Object === Object && self; root3 = _freeGlobal || freeSelf2 || Function("return this")(); _root = root3; now3 = /* @__PURE__ */ __name(function() { return _root.Date.now(); }, "now"); now_1 = now3; reWhitespace2 = /\s/; __name(trimmedEndIndex2, "trimmedEndIndex"); _trimmedEndIndex = trimmedEndIndex2; reTrimStart2 = /^\s+/; __name(baseTrim2, "baseTrim"); _baseTrim = baseTrim2; Symbol$1 = _root.Symbol; _Symbol = Symbol$1; objectProto$5 = Object.prototype; hasOwnProperty$4 = objectProto$5.hasOwnProperty; nativeObjectToString$1 = objectProto$5.toString; symToStringTag$1 = _Symbol ? _Symbol.toStringTag : void 0; __name(getRawTag2, "getRawTag"); _getRawTag = getRawTag2; objectProto$4 = Object.prototype; nativeObjectToString3 = objectProto$4.toString; __name(objectToString2, "objectToString"); _objectToString = objectToString2; nullTag2 = "[object Null]"; undefinedTag2 = "[object Undefined]"; symToStringTag3 = _Symbol ? _Symbol.toStringTag : void 0; __name(baseGetTag2, "baseGetTag"); _baseGetTag = baseGetTag2; __name(isObjectLike2, "isObjectLike"); isObjectLike_1 = isObjectLike2; symbolTag5 = "[object Symbol]"; __name(isSymbol2, "isSymbol"); isSymbol_1 = isSymbol2; NAN2 = 0 / 0; reIsBadHex2 = /^[-+]0x[0-9a-f]+$/i; reIsBinary2 = /^0b[01]+$/i; reIsOctal2 = /^0o[0-7]+$/i; freeParseInt2 = parseInt; __name(toNumber2, "toNumber"); toNumber_1 = toNumber2; FUNC_ERROR_TEXT$1 = "Expected a function"; nativeMax6 = Math.max; nativeMin = Math.min; __name(debounce, "debounce"); debounce_1 = debounce; performance2 = _window ? _window.performance : null; pnow = performance2 && performance2.now ? function() { return performance2.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; K3 = 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 * K3 + 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 * K3 + 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"); hashString = /* @__PURE__ */ __name(function hashString2(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 = hashString(str2); } else { hash = hashString(str2, hash); } } return hash; }, "hashStringsArray"); 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 noop3() { }, "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"); clone3 = /* @__PURE__ */ __name(function clone4(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 clone3(obj); } else { return obj; } }, "copy"); copyArray$1 = /* @__PURE__ */ __name(function copyArray2(arr) { return arr.slice(); }, "copyArray"); uuid = /* @__PURE__ */ __name(function uuid2(a2, b2) { for ( // loop :) b2 = a2 = ""; // b - result , a - numeric letiable a2++ < 36; // b2 += 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 b2; }, "uuid"); _staticEmptyObject = {}; staticEmptyObject = /* @__PURE__ */ __name(function staticEmptyObject2() { return _staticEmptyObject; }, "staticEmptyObject"); defaults$g = /* @__PURE__ */ __name(function defaults2(_defaults2) { var keys3 = Object.keys(_defaults2); 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 ? _defaults2[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); if (oneCopy) { break; } } } }, "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"); _createClass(ObjectMap2, [{ key: "set", value: /* @__PURE__ */ __name(function set6(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 clear27() { this._obj = {}; }, "clear") }, { key: "has", value: /* @__PURE__ */ __name(function has2(key) { return this._obj[key] !== void 0; }, "has") }, { key: "get", value: /* @__PURE__ */ __name(function get6(key) { return this._obj[key]; }, "get") }]); return ObjectMap2; }(); Map$2 = 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"); _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 clear27() { this._obj = /* @__PURE__ */ Object.create(null); }, "clear") }, { key: "has", value: /* @__PURE__ */ __name(function has2(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 forEach3(callback, thisArg) { return this.toArray().forEach(callback, thisArg); }, "forEach") }]); return ObjectSet2; }(); 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 classes6 = []; if (array2(params.classes)) { classes6 = params.classes; } else if (string(params.classes)) { classes6 = params.classes.split(/\s+/); } for (var i2 = 0, l2 = classes6.length; i2 < l2; i2++) { var cls = classes6[i2]; if (!cls || cls === "") { continue; } _p.classes.add(cls); } this.createEmitter(); 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); } if (restore === void 0 || restore) { this.restore(); } }, "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 options3; if (plainObject(roots) && !elementOrCollection(roots)) { options3 = roots; roots = options3.roots || options3.root; fn3 = options3.visit; directed = options3.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 Q2 = []; var connectedNodes = []; var connectedBy = {}; var id2depth = {}; var V2 = {}; var j2 = 0; var found; var _this$byGroup = this.byGroup(), nodes7 = _this$byGroup.nodes, edges5 = _this$byGroup.edges; for (var i2 = 0; i2 < v3.length; i2++) { var vi2 = v3[i2]; var viId = vi2.id(); if (vi2.isNode()) { Q2.unshift(vi2); if (params.bfs) { V2[viId] = true; connectedNodes.push(vi2); } id2depth[viId] = 0; } } var _loop = /* @__PURE__ */ __name(function _loop2() { var v4 = params.bfs ? Q2.shift() : Q2.pop(); var vId = v4.id(); if (params.dfs) { if (V2[vId]) { return "continue"; } V2[vId] = true; connectedNodes.push(v4); } 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 : v4.same(src) ? tgt[0] : src[0]; var ret = void 0; ret = fn3(v4, prevEdge, prevNode, j2++, depth); if (ret === true) { found = v4; return "break"; } if (ret === false) { return "break"; } var vwEdges = v4.connectedEdges().filter(function(e4) { return (!directed || e4.source().same(v4)) && edges5.has(e4); }); for (var _i2 = 0; _i2 < vwEdges.length; _i2++) { var e3 = vwEdges[_i2]; var w3 = e3.connectedNodes().filter(function(n2) { return !n2.same(v4) && nodes7.has(n2); }); var wId = w3.id(); if (w3.length !== 0 && !V2[wId]) { w3 = w3[0]; Q2.push(w3); if (params.bfs) { V2[wId] = true; connectedNodes.push(w3); } connectedBy[wId] = e3; id2depth[wId] = id2depth[vId] + 1; } } }, "_loop"); while (Q2.length !== 0) { var _ret = _loop(); if (_ret === "continue") continue; if (_ret === "break") 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$1 = createCommonjsModule(function(module2, exports2) { (function() { var Heap, defaultCmp, floor, heapify, heappop, heappush, heappushpop, heapreplace, insort, min9, nlargest, nsmallest, updateItem, _siftdown, _siftup; floor = Math.floor, min9 = Math.min; defaultCmp = /* @__PURE__ */ __name(function(x5, y5) { if (x5 < y5) { return -1; } if (x5 > y5) { 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 = min9(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"); Heap = function() { Heap2.push = heappush; Heap2.pop = heappop; Heap2.replace = heapreplace; Heap2.pushpop = heappushpop; Heap2.heapify = heapify; Heap2.updateItem = updateItem; Heap2.nlargest = nlargest; Heap2.nsmallest = nsmallest; function Heap2(cmp) { this.cmp = cmp != null ? cmp : defaultCmp; this.nodes = []; } __name(Heap2, "Heap"); Heap2.prototype.push = function(x5) { return heappush(this.nodes, x5, this.cmp); }; Heap2.prototype.pop = function() { return heappop(this.nodes, this.cmp); }; Heap2.prototype.peek = function() { return this.nodes[0]; }; Heap2.prototype.contains = function(x5) { return this.nodes.indexOf(x5) !== -1; }; Heap2.prototype.replace = function(x5) { return heapreplace(this.nodes, x5, this.cmp); }; Heap2.prototype.pushpop = function(x5) { return heappushpop(this.nodes, x5, this.cmp); }; Heap2.prototype.heapify = function() { return heapify(this.nodes, this.cmp); }; Heap2.prototype.updateItem = function(x5) { return updateItem(this.nodes, x5, this.cmp); }; Heap2.prototype.clear = function() { return this.nodes = []; }; Heap2.prototype.empty = function() { return this.nodes.length === 0; }; Heap2.prototype.size = function() { return this.nodes.length; }; Heap2.prototype.clone = function() { var heap2; heap2 = new Heap2(); heap2.nodes = this.nodes.slice(0); return heap2; }; Heap2.prototype.toArray = function() { return this.nodes.slice(0); }; Heap2.prototype.insert = Heap2.prototype.push; Heap2.prototype.top = Heap2.prototype.peek; Heap2.prototype.front = Heap2.prototype.peek; Heap2.prototype.has = Heap2.prototype.contains; Heap2.prototype.copy = Heap2.prototype.clone; return Heap2; }(); (function(root4, factory) { { return module2.exports = factory(); } })(this, function() { return Heap; }); }).call(commonjsGlobal); }); heap = heap$1; dijkstraDefaults = defaults$g({ root: null, weight: /* @__PURE__ */ __name(function weight(edge) { return 1; }, "weight"), directed: false }); elesfn$u = { dijkstra: /* @__PURE__ */ __name(function dijkstra2(options3) { if (!plainObject(options3)) { var args = arguments; options3 = { root: args[0], weight: args[1], directed: args[2] }; } var _dijkstraDefaults = dijkstraDefaults(options3), 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(), nodes7 = _this$byGroup.nodes, edges5 = _this$byGroup.edges; edges5.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, d2) { dist3[node3.id()] = d2; Q2.updateItem(node3); }, "setDist"); var Q2 = new heap(function(a2, b2) { return getDist3(a2) - getDist3(b2); }); for (var i2 = 0; i2 < nodes7.length; i2++) { var node2 = nodes7[i2]; dist3[node2.id()] = node2.same(source) ? 0 : Infinity; Q2.push(node2); } var distBetween = /* @__PURE__ */ __name(function distBetween2(u3, v4) { var uvs = (directed ? u3.edgesTo(v4) : u3.edgesWith(v4)).intersect(edges5); 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 (Q2.size() > 0) { var u2 = Q2.pop(); var smalletsDist = getDist3(u2); var uid = u2.id(); knownDist[uid] = smalletsDist; if (smalletsDist === Infinity) { continue; } var neighbors = u2.neighborhood().intersect(nodes7); 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) ? nodes7.filter(node3)[0] : node3[0]; return knownDist[target.id()]; }, "distanceTo"), pathTo: /* @__PURE__ */ __name(function pathTo(node3) { var target = string(node3) ? nodes7.filter(node3)[0] : node3[0]; var S3 = []; var u3 = target; var uid2 = u3.id(); if (target.length > 0) { S3.unshift(target); while (prev2[uid2]) { var p3 = prev2[uid2]; S3.unshift(p3.edge); S3.unshift(p3.node); u3 = p3.node; uid2 = u3.id(); } } return eles.spawn(S3); }, "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(), nodes7 = _this$byGroup.nodes, edges5 = _this$byGroup.edges; var numNodes = nodes7.length; var forest = new Array(numNodes); var A2 = nodes7; 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(nodes7[i2]); } var S3 = edges5.sort(function(a2, b2) { return weightFn(a2) - weightFn(b2); }); for (var _i = 0; _i < S3.length; _i++) { var edge = S3[_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(options3) { var cy = this.cy(); var _aStarDefaults = aStarDefaults(options3), 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, b2) { return fScore[a2.id()] - fScore[b2.id()]; }); var openSetIds = new Set$1(); var cameFrom = {}; var cameFromEdge = {}; var addToOpenSet = /* @__PURE__ */ __name(function addToOpenSet2(ele, id28) { openSet.push(ele); openSetIds.add(id28); }, "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(id28) { return openSetIds.has(id28); }, "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 w3 = wSrc.id() !== cMinId ? wSrc : wTgt; var wid = w3.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(w3); addToOpenSet(w3, wid); cameFrom[wid] = cMin; cameFromEdge[wid] = e3; continue; } if (tempScore < gScore[wid]) { gScore[wid] = tempScore; fScore[wid] = tempScore + heuristic2(w3); 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(options3) { var cy = this.cy(); var _floydWarshallDefault = floydWarshallDefaults(options3), weight8 = _floydWarshallDefault.weight, directed = _floydWarshallDefault.directed; var weightFn = weight8; var _this$byGroup = this.byGroup(), nodes7 = _this$byGroup.nodes, edges5 = _this$byGroup.edges; var N2 = nodes7.length; var Nsq = N2 * N2; var indexOf2 = /* @__PURE__ */ __name(function indexOf3(node2) { return nodes7.indexOf(node2); }, "indexOf"); var atIndex = /* @__PURE__ */ __name(function atIndex2(i3) { return nodes7[i3]; }, "atIndex"); var dist3 = new Array(Nsq); for (var n2 = 0; n2 < Nsq; n2++) { var j2 = n2 % N2; var i2 = (n2 - j2) / N2; if (i2 === j2) { dist3[n2] = 0; } else { dist3[n2] = Infinity; } } var next3 = new Array(Nsq); var edgeNext = new Array(Nsq); for (var _i = 0; _i < edges5.length; _i++) { var edge = edges5[_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 * N2 + t4; var _weight = weightFn(edge); if (dist3[st2] > _weight) { dist3[st2] = _weight; next3[st2] = t4; edgeNext[st2] = edge; } if (!directed) { var ts = t4 * N2 + s2; if (!directed && dist3[ts] > _weight) { dist3[ts] = _weight; next3[ts] = s2; edgeNext[ts] = edge; } } } for (var k2 = 0; k2 < N2; k2++) { for (var _i2 = 0; _i2 < N2; _i2++) { var ik = _i2 * N2 + k2; for (var _j = 0; _j < N2; _j++) { var ij = _i2 * N2 + _j; var kj = k2 * N2 + _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 distance2(from2, to) { var i3 = indexOfArgEle(from2); var j3 = indexOfArgEle(to); return dist3[i3 * N2 + j3]; }, "distance"), path: /* @__PURE__ */ __name(function path4(from2, to) { var i3 = indexOfArgEle(from2); var j3 = indexOfArgEle(to); var fromNode = atIndex(i3); if (i3 === j3) { return fromNode.collection(); } if (next3[i3 * N2 + j3] == null) { return cy.collection(); } var path5 = cy.collection(); var prev2 = i3; var edge2; path5.merge(fromNode); while (i3 !== j3) { prev2 = i3; i3 = next3[i3 * N2 + j3]; edge2 = edgeNext[prev2 * N2 + 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(options3) { var _this = this; var _bellmanFordDefaults = bellmanFordDefaults(options3), weight8 = _bellmanFordDefaults.weight, directed = _bellmanFordDefaults.directed, root4 = _bellmanFordDefaults.root; var weightFn = weight8; var eles = this; var cy = this.cy(); var _this$byGroup = this.byGroup(), edges5 = _this$byGroup.edges, nodes7 = _this$byGroup.nodes; var numNodes = nodes7.length; var infoMap = new Map$2(); var hasNegativeWeightCycle = false; var negativeWeightCycles = []; root4 = cy.collection(root4)[0]; edges5.unmergeBy(function(edge2) { return edge2.isLoop(); }); var numEdges = edges5.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 = nodes7[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 = edges5[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 _e = 0; _e < numEdges; _e++) { var _edge = edges5[_e]; 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 (options3.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, size5, sizeLimit) { while (size5 > sizeLimit) { var edgeIndex = Math.floor(Math.random() * remainingEdges.length); remainingEdges = collapse(edgeIndex, metaNodeMap, remainingEdges); size5--; } 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(), nodes7 = _this$byGroup.nodes, edges5 = _this$byGroup.edges; edges5.unmergeBy(function(edge) { return edge.isLoop(); }); var numNodes = nodes7.length; var numEdges = edges5.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 = edges5[i2]; edgeIndexes.push([i2, nodes7.indexOf(e3.source()), nodes7.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 edges5[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 = nodes7[_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 = /* @__PURE__ */ __name(function modelToRenderedPosition2(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 min9 = Infinity; for (var i2 = begin; i2 < end2; i2++) { var val = arr[i2]; if (isFinite(val)) { min9 = Math.min(val, min9); } } return min9; }, "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"); median = /* @__PURE__ */ __name(function median2(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, b2) { return a2 - b2; }); } 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, d2) { 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; d2 = d2 != null ? d2 : t4 * vecDist; return { x: p0.x + normVec.x * d2, y: p0.y + normVec.y * d2 }; }, "lineAt"); bound = /* @__PURE__ */ __name(function bound2(min9, val, max10) { return Math.max(min9, 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"); shiftBoundingBox = /* @__PURE__ */ __name(function shiftBoundingBox2(bb, dx, dy) { return { x1: bb.x1 + dx, x2: bb.x2 + dx, y1: bb.y1 + dy, y2: bb.y2 + dy, w: bb.w, h: bb.h }; }, "shiftBoundingBox"); 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, y5) { 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, y5); bb.y2 = Math.max(bb.y2, y5); bb.h = bb.y2 - bb.y1; }, "expandBoundingBoxByPoint"); expandBoundingBox = /* @__PURE__ */ __name(function expandBoundingBox2(bb) { var padding2 = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0; bb.x1 -= padding2; bb.x2 += padding2; bb.y1 -= padding2; bb.y2 += padding2; bb.w = bb.x2 - bb.x1; bb.h = bb.y2 - bb.y1; return bb; }, "expandBoundingBox"); expandBoundingBoxSides = /* @__PURE__ */ __name(function expandBoundingBoxSides2(bb) { var padding2 = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : [0]; var top2, right3, bottom2, left3; if (padding2.length === 1) { top2 = right3 = bottom2 = left3 = padding2[0]; } else if (padding2.length === 2) { top2 = bottom2 = padding2[0]; left3 = right3 = padding2[1]; } else if (padding2.length === 4) { var _padding = _slicedToArray(padding2, 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, y5) { return bb.x1 <= x5 && x5 <= bb.x2 && bb.y1 <= y5 && y5 <= 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"); roundRectangleIntersectLine = /* @__PURE__ */ __name(function roundRectangleIntersectLine2(x5, y5, nodeX, nodeY, width3, height2, padding2) { 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 - padding2; var topStartY = nodeY - halfHeight - padding2; var topEndX = nodeX + halfWidth - cornerRadius + padding2; var topEndY = topStartY; straightLineIntersections = finiteLinesIntersect(x5, y5, nodeX, nodeY, topStartX, topStartY, topEndX, topEndY, false); if (straightLineIntersections.length > 0) { return straightLineIntersections; } } if (doHeight) { var rightStartX = nodeX + halfWidth + padding2; var rightStartY = nodeY - halfHeight + cornerRadius - padding2; var rightEndX = rightStartX; var rightEndY = nodeY + halfHeight - cornerRadius + padding2; straightLineIntersections = finiteLinesIntersect(x5, y5, nodeX, nodeY, rightStartX, rightStartY, rightEndX, rightEndY, false); if (straightLineIntersections.length > 0) { return straightLineIntersections; } } if (doWidth) { var bottomStartX = nodeX - halfWidth + cornerRadius - padding2; var bottomStartY = nodeY + halfHeight + padding2; var bottomEndX = nodeX + halfWidth - cornerRadius + padding2; var bottomEndY = bottomStartY; straightLineIntersections = finiteLinesIntersect(x5, y5, nodeX, nodeY, bottomStartX, bottomStartY, bottomEndX, bottomEndY, false); if (straightLineIntersections.length > 0) { return straightLineIntersections; } } if (doHeight) { var leftStartX = nodeX - halfWidth - padding2; var leftStartY = nodeY - halfHeight + cornerRadius - padding2; var leftEndX = leftStartX; var leftEndY = nodeY + halfHeight - cornerRadius + padding2; straightLineIntersections = finiteLinesIntersect(x5, y5, 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, y5, nodeX, nodeY, topLeftCenterX, topLeftCenterY, cornerRadius + padding2); 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, y5, nodeX, nodeY, topRightCenterX, topRightCenterY, cornerRadius + padding2); 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, y5, nodeX, nodeY, bottomRightCenterX, bottomRightCenterY, cornerRadius + padding2); 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, y5, nodeX, nodeY, bottomLeftCenterX, bottomLeftCenterY, cornerRadius + padding2); if (arcIntersections.length > 0 && arcIntersections[0] <= bottomLeftCenterX && arcIntersections[1] >= bottomLeftCenterY) { return [arcIntersections[0], arcIntersections[1]]; } } return []; }, "roundRectangleIntersectLine"); inLineVicinity = /* @__PURE__ */ __name(function inLineVicinity2(x5, y5, 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 <= y5 && y5 <= y22 + t4; }, "inLineVicinity"); inBezierVicinity = /* @__PURE__ */ __name(function inBezierVicinity2(x5, y5, 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 || y5 < bb.y1 || y5 > bb.y2) { return false; } else { return true; } }, "inBezierVicinity"); solveQuadratic = /* @__PURE__ */ __name(function solveQuadratic2(a2, b2, c3, val) { c3 -= val; var r2 = b2 * b2 - 4 * a2 * c3; if (r2 < 0) { return []; } var sqrtR = Math.sqrt(r2); var denom = 2 * a2; var root1 = (-b2 + sqrtR) / denom; var root22 = (-b2 - sqrtR) / denom; return [root1, root22]; }, "solveQuadratic"); solveCubic = /* @__PURE__ */ __name(function solveCubic2(a2, b2, c3, d2, result) { var epsilon6 = 1e-5; if (a2 === 0) { a2 = epsilon6; } b2 /= a2; c3 /= a2; d2 /= a2; var discriminant, q2, r2, dum1, s2, t4, term1, r13; q2 = (3 * c3 - b2 * b2) / 9; r2 = -(27 * d2) + b2 * (9 * c3 - 2 * (b2 * b2)); r2 /= 54; discriminant = q2 * q2 * q2 + r2 * r2; result[1] = 0; term1 = b2 / 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; } q2 = -q2; dum1 = q2 * q2 * q2; dum1 = Math.acos(r2 / Math.sqrt(dum1)); r13 = 2 * Math.sqrt(q2); 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, y5, 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 b2 = 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 * y5 + 2 * y22 * y22 + 2 * y22 * y5 - y32 * y5; var d2 = 1 * x1 * x22 - x1 * x1 + x1 * x5 - x22 * x5 + y1 * y22 - y1 * y1 + y1 * y5 - y22 * y5; var roots = []; solveCubic(a2, b2, c3, d2, 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 - y5, 2); if (minDistanceSquared >= 0) { if (distSquared < minDistanceSquared) { minDistanceSquared = distSquared; } } else { minDistanceSquared = distSquared; } } return minDistanceSquared; }, "sqdistToQuadraticBezier"); sqdistToFiniteLine = /* @__PURE__ */ __name(function sqdistToFiniteLine2(x5, y5, x1, y1, x22, y22) { var offset = [x5 - x1, y5 - 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) + (y5 - y22) * (y5 - y22); } return hypSq - adjSq; }, "sqdistToFiniteLine"); pointInsidePolygonPoints = /* @__PURE__ */ __name(function pointInsidePolygonPoints2(x5, y5, 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 > y5) { up++; } } else { continue; } } if (up % 2 === 0) { return false; } else { return true; } }, "pointInsidePolygonPoints"); pointInsidePolygon = /* @__PURE__ */ __name(function pointInsidePolygon2(x5, y5, basePoints, centerX, centerY, width3, height2, direction4, padding2) { var transformedPoints = new Array(basePoints.length); var angle2; if (direction4[0] != null) { angle2 = Math.atan(direction4[1] / direction4[0]); if (direction4[0] < 0) { angle2 = angle2 + Math.PI / 2; } else { angle2 = -angle2 - Math.PI / 2; } } else { angle2 = direction4; } 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 (padding2 > 0) { var expandedLineSet = expandPolygon(transformedPoints, -padding2); points = joinLines(expandedLineSet); } else { points = transformedPoints; } return pointInsidePolygonPoints(x5, y5, points); }, "pointInsidePolygon"); pointInsideRoundPolygon = /* @__PURE__ */ __name(function pointInsideRoundPolygon2(x5, y5, 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 - y5, 2); if (squaredDistance <= Math.pow(corner.radius, 2)) { return true; } } return pointInsidePolygonPoints(x5, y5, cutPolygonPoints); }, "pointInsideRoundPolygon"); joinLines = /* @__PURE__ */ __name(function joinLines2(lineSet) { var vertices2 = 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 intersection3 = finiteLinesIntersect(currentLineStartX, currentLineStartY, currentLineEndX, currentLineEndY, nextLineStartX, nextLineStartY, nextLineEndX, nextLineEndY, true); vertices2[i2 * 2] = intersection3[0]; vertices2[i2 * 2 + 1] = intersection3[1]; } return vertices2; }, "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, y5, centerX, centerY, ellipseWradius, ellipseHradius) { var dispX = centerX - x5; var dispY = centerY - y5; 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 - y5) * lenProportion + y5]; }, "intersectLineEllipse"); checkInEllipse = /* @__PURE__ */ __name(function checkInEllipse2(x5, y5, width3, height2, centerX, centerY, padding2) { x5 -= centerX; y5 -= centerY; x5 /= width3 / 2 + padding2; y5 /= height2 / 2 + padding2; return x5 * x5 + y5 * y5 <= 1; }, "checkInEllipse"); intersectLineCircle = /* @__PURE__ */ __name(function intersectLineCircle2(x1, y1, x22, y22, centerX, centerY, radius2) { var d2 = [x22 - x1, y22 - y1]; var f3 = [x1 - centerX, y1 - centerY]; var a2 = d2[0] * d2[0] + d2[1] * d2[1]; var b2 = 2 * (f3[0] * d2[0] + f3[1] * d2[1]); var c3 = f3[0] * f3[0] + f3[1] * f3[1] - radius2 * radius2; var discriminant = b2 * b2 - 4 * a2 * c3; if (discriminant < 0) { return []; } var t13 = (-b2 + Math.sqrt(discriminant)) / (2 * a2); var t22 = (-b2 - 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] * d2[0] + x1; var nearIntersectionY = inRangeParams[0] * d2[1] + y1; if (inRangeParams.length > 1) { if (inRangeParams[0] == inRangeParams[1]) { return [nearIntersectionX, nearIntersectionY]; } else { var farIntersectionX = inRangeParams[1] * d2[0] + x1; var farIntersectionY = inRangeParams[1] * d2[1] + y1; return [nearIntersectionX, nearIntersectionY, farIntersectionX, farIntersectionY]; } } else { return [nearIntersectionX, nearIntersectionY]; } }, "intersectLineCircle"); midOfThree = /* @__PURE__ */ __name(function midOfThree2(a2, b2, c3) { if (b2 <= a2 && a2 <= c3 || c3 <= a2 && a2 <= b2) { return a2; } else if (a2 <= b2 && b2 <= c3 || c3 <= b2 && b2 <= a2) { return b2; } 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"); polygonIntersectLine = /* @__PURE__ */ __name(function polygonIntersectLine2(x5, y5, basePoints, centerX, centerY, width3, height2, padding2) { var intersections = []; var intersection3; 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 (padding2 > 0) { var expandedLineSet = expandPolygon(transformedPoints, -padding2); points = joinLines(expandedLineSet); } else { points = transformedPoints; } } else { points = basePoints; } var currentX, currentY, nextX, nextY; for (var _i2 = 0; _i2 < points.length / 2; _i2++) { currentX = points[_i2 * 2]; currentY = points[_i2 * 2 + 1]; if (_i2 < points.length / 2 - 1) { nextX = points[(_i2 + 1) * 2]; nextY = points[(_i2 + 1) * 2 + 1]; } else { nextX = points[0]; nextY = points[1]; } intersection3 = finiteLinesIntersect(x5, y5, centerX, centerY, currentX, currentY, nextX, nextY); if (intersection3.length !== 0) { intersections.push(intersection3[0], intersection3[1]); } } return intersections; }, "polygonIntersectLine"); roundPolygonIntersectLine = /* @__PURE__ */ __name(function roundPolygonIntersectLine2(x5, y5, basePoints, centerX, centerY, width3, height2, padding2, corners) { var intersections = []; var intersection3; 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; intersection3 = intersectLineCircle(x5, y5, centerX, centerY, corner.cx, corner.cy, corner.radius); if (intersection3.length !== 0) { intersections.push(intersection3[0], intersection3[1]); } }); for (var i2 = 0; i2 < lines.length / 4; i2++) { intersection3 = finiteLinesIntersect(x5, y5, centerX, centerY, lines[i2 * 4], lines[i2 * 4 + 1], lines[i2 * 4 + 2], lines[i2 * 4 + 3], false); if (intersection3.length !== 0) { intersections.push(intersection3[0], intersection3[1]); } } if (intersections.length > 2) { var lowestIntersection = [intersections[0], intersections[1]]; var lowestSquaredDistance = Math.pow(lowestIntersection[0] - x5, 2) + Math.pow(lowestIntersection[1] - y5, 2); for (var _i3 = 1; _i3 < intersections.length / 2; _i3++) { var squaredDistance = Math.pow(intersections[_i3 * 2] - x5, 2) + Math.pow(intersections[_i3 * 2 + 1] - y5, 2); if (squaredDistance <= lowestSquaredDistance) { lowestIntersection[0] = intersections[_i3 * 2]; lowestIntersection[1] = intersections[_i3 * 2 + 1]; lowestSquaredDistance = squaredDistance; } } return lowestIntersection; } return intersections; }, "roundPolygonIntersectLine"); shortenIntersection = /* @__PURE__ */ __name(function shortenIntersection2(intersection3, offset, amount) { var disp = [intersection3[0] - offset[0], intersection3[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, y5; 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]; y5 = points[2 * i2 + 1]; minX = Math.min(minX, x5); maxX = Math.max(maxX, x5); minY = Math.min(minY, y5); maxY = Math.max(maxY, y5); } var sx = 2 / (maxX - minX); var sy = 2 / (maxY - minY); for (var _i4 = 0; _i4 < sides; _i4++) { x5 = points[2 * _i4] = points[2 * _i4] * sx; y5 = points[2 * _i4 + 1] = points[2 * _i4 + 1] * sy; minX = Math.min(minX, x5); maxX = Math.max(maxX, x5); minY = Math.min(minY, y5); maxY = Math.max(maxY, y5); } if (minY < -1) { for (var _i5 = 0; _i5 < sides; _i5++) { y5 = points[2 * _i5 + 1] = points[2 * _i5 + 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"); 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(options3) { var _pageRankDefaults = pageRankDefaults(options3), dampingFactor = _pageRankDefaults.dampingFactor, precision = _pageRankDefaults.precision, iterations = _pageRankDefaults.iterations, weight8 = _pageRankDefaults.weight; var cy = this._private.cy; var _this$byGroup = this.byGroup(), nodes7 = _this$byGroup.nodes, edges5 = _this$byGroup.edges; var numNodes = nodes7.length; var numNodesSqd = numNodes * numNodes; var numEdges = edges5.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 j2 = 0; j2 < numNodes; j2++) { var n2 = i2 * numNodes + j2; matrix[n2] = 0; } columnSum[i2] = 0; } for (var _i = 0; _i < numEdges; _i++) { var edge = edges5[_i]; var srcId = edge.data("source"); var tgtId = edge.data("target"); if (srcId === tgtId) { continue; } var s2 = nodes7.indexOfId(srcId); var t4 = nodes7.indexOfId(tgtId); var w3 = weight8(edge); var _n = t4 * numNodes + s2; matrix[_n] += w3; columnSum[s2] += w3; } 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[nodes7.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(options3) { options3 = defaults$f(options3); var cy = this.cy(); var nodes7 = this.nodes(); var numNodes = nodes7.length; if (!options3.directed) { var degrees3 = {}; var maxDegree = 0; for (var i2 = 0; i2 < numNodes; i2++) { var node2 = nodes7[i2]; options3.root = node2; var currDegree = this.degreeCentrality(options3); 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 = nodes7[_i]; var id28 = _node.id(); options3.root = _node; var _currDegree = this.degreeCentrality(options3); if (maxIndegree < _currDegree.indegree) maxIndegree = _currDegree.indegree; if (maxOutdegree < _currDegree.outdegree) maxOutdegree = _currDegree.outdegree; indegrees[id28] = _currDegree.indegree; outdegrees[id28] = _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(options3) { options3 = defaults$f(options3); var cy = this.cy(); var callingEles = this; var _options = options3, 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 edges5 = root4.connectedEdges(); var incoming = edges5.filter(function(edge) { return edge.target().same(root4) && callingEles.has(edge); }); var outgoing = edges5.filter(function(edge) { return edge.source().same(root4) && callingEles.has(edge); }); var k_in = incoming.length; var k_out = outgoing.length; var s_in = 0; var s_out = 0; for (var _i2 = 0; _i2 < incoming.length; _i2++) { s_in += weight8(incoming[_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(options3) { var _defaults2 = defaults$e(options3), harmonic = _defaults2.harmonic, weight8 = _defaults2.weight, directed = _defaults2.directed; var cy = this.cy(); var closenesses = {}; var maxCloseness = 0; var nodes7 = this.nodes(); var fw = this.floydWarshall({ weight: weight8, directed }); for (var i2 = 0; i2 < nodes7.length; i2++) { var currCloseness = 0; var node_i = nodes7[i2]; for (var j2 = 0; j2 < nodes7.length; j2++) { if (i2 !== j2) { var d2 = fw.distance(node_i, nodes7[j2]); if (harmonic) { currCloseness += 1 / d2; } else { currCloseness += d2; } } } 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(options3) { var _defaults2 = defaults$e(options3), 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 nodes7 = this.nodes(); for (var i2 = 0; i2 < nodes7.length; i2++) { var n2 = nodes7[i2]; if (!n2.same(root4)) { var d2 = dijkstra3.distanceTo(n2); if (harmonic) { totalDistance += 1 / d2; } else { totalDistance += d2; } } } 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(options3) { var _defaults2 = defaults$d(options3), directed = _defaults2.directed, weight8 = _defaults2.weight; var weighted = weight8 != null; var cy = this.cy(); var V2 = this.nodes(); var A2 = {}; var _C = {}; var max10 = 0; var C2 = { set: /* @__PURE__ */ __name(function set6(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 < V2.length; i2++) { var v3 = V2[i2]; var vid = v3.id(); if (directed) { A2[vid] = v3.outgoers().nodes(); } else { A2[vid] = v3.openNeighborhood().nodes(); } C2.set(vid, 0); } var _loop = /* @__PURE__ */ __name(function _loop2(s3) { var sid = V2[s3].id(); var S3 = []; var P2 = {}; var g2 = {}; var d2 = {}; var Q2 = new heap(function(a2, b2) { return d2[a2] - d2[b2]; }); for (var _i = 0; _i < V2.length; _i++) { var _vid = V2[_i].id(); P2[_vid] = []; g2[_vid] = 0; d2[_vid] = Infinity; } g2[sid] = 1; d2[sid] = 0; Q2.push(sid); while (!Q2.empty()) { var _v = Q2.pop(); S3.push(_v); if (weighted) { for (var j2 = 0; j2 < A2[_v].length; j2++) { var w3 = A2[_v][j2]; var vEle = cy.getElementById(_v); var edge = void 0; if (vEle.edgesTo(w3).length > 0) { edge = vEle.edgesTo(w3)[0]; } else { edge = w3.edgesTo(vEle)[0]; } var edgeWeight = weight8(edge); w3 = w3.id(); if (d2[w3] > d2[_v] + edgeWeight) { d2[w3] = d2[_v] + edgeWeight; if (Q2.nodes.indexOf(w3) < 0) { Q2.push(w3); } else { Q2.updateItem(w3); } g2[w3] = 0; P2[w3] = []; } if (d2[w3] == d2[_v] + edgeWeight) { g2[w3] = g2[w3] + g2[_v]; P2[w3].push(_v); } } } else { for (var _j = 0; _j < A2[_v].length; _j++) { var _w = A2[_v][_j].id(); if (d2[_w] == Infinity) { Q2.push(_w); d2[_w] = d2[_v] + 1; } if (d2[_w] == d2[_v] + 1) { g2[_w] = g2[_w] + g2[_v]; P2[_w].push(_v); } } } } var e3 = {}; for (var _i2 = 0; _i2 < V2.length; _i2++) { e3[V2[_i2].id()] = 0; } while (S3.length > 0) { var _w2 = S3.pop(); for (var _j2 = 0; _j2 < P2[_w2].length; _j2++) { var _v2 = P2[_w2][_j2]; e3[_v2] = e3[_v2] + g2[_v2] / g2[_w2] * (1 + e3[_w2]); } if (_w2 != V2[s3].id()) { C2.set(_w2, C2.get(_w2) + e3[_w2]); } } }, "_loop"); for (var s2 = 0; s2 < V2.length; s2++) { _loop(s2); } var ret = { betweenness: /* @__PURE__ */ __name(function betweenness(node2) { var id28 = cy.collection(node2).id(); return C2.get(id28); }, "betweenness"), betweennessNormalized: /* @__PURE__ */ __name(function betweennessNormalized(node2) { if (max10 == 0) { return 0; } var id28 = cy.collection(node2).id(); return C2.get(id28) / 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 setOptions3(options3) { return defaults$c(options3); }, "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(M2, n2, val) { for (var i2 = 0; i2 < n2; i2++) { M2[i2 * n2 + i2] = val; } }, "addLoops"); normalize2 = /* @__PURE__ */ __name(function normalize3(M2, n2) { var sum2; for (var col = 0; col < n2; col++) { sum2 = 0; for (var row = 0; row < n2; row++) { sum2 += M2[row * n2 + col]; } for (var _row = 0; _row < n2; _row++) { M2[_row * n2 + col] = M2[_row * n2 + col] / sum2; } } }, "normalize"); mmult = /* @__PURE__ */ __name(function mmult2(A2, B2, n2) { var C2 = new Array(n2 * n2); for (var i2 = 0; i2 < n2; i2++) { for (var j2 = 0; j2 < n2; j2++) { C2[i2 * n2 + j2] = 0; } for (var k2 = 0; k2 < n2; k2++) { for (var _j = 0; _j < n2; _j++) { C2[i2 * n2 + _j] += A2[i2 * n2 + k2] * B2[k2 * n2 + _j]; } } } return C2; }, "mmult"); expand = /* @__PURE__ */ __name(function expand2(M2, n2, expandFactor) { var _M = M2.slice(0); for (var p3 = 1; p3 < expandFactor; p3++) { M2 = mmult(M2, _M, n2); } return M2; }, "expand"); inflate = /* @__PURE__ */ __name(function inflate2(M2, n2, inflateFactor) { var _M = new Array(n2 * n2); for (var i2 = 0; i2 < n2 * n2; i2++) { _M[i2] = Math.pow(M2[i2], inflateFactor); } normalize2(_M, n2); return _M; }, "inflate"); hasConverged = /* @__PURE__ */ __name(function hasConverged2(M2, _M, n2, roundFactor) { for (var i2 = 0; i2 < n2; i2++) { var v12 = Math.round(M2[i2] * Math.pow(10, roundFactor)) / Math.pow(10, roundFactor); var v22 = Math.round(_M[i2] * Math.pow(10, roundFactor)) / Math.pow(10, roundFactor); if (v12 !== v22) { return false; } } return true; }, "hasConverged"); assign$2 = /* @__PURE__ */ __name(function assign2(M2, n2, nodes7, cy) { var clusters = []; for (var i2 = 0; i2 < n2; i2++) { var cluster = []; for (var j2 = 0; j2 < n2; j2++) { if (Math.round(M2[i2 * n2 + j2] * 1e3) / 1e3 > 0) { cluster.push(nodes7[j2]); } } 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 j2 = 0; j2 < clusters.length; j2++) { if (i2 != j2 && isDuplicate(clusters[i2], clusters[j2])) { clusters.splice(j2, 1); } } } return clusters; }, "removeDuplicates"); markovClustering = /* @__PURE__ */ __name(function markovClustering2(options3) { var nodes7 = this.nodes(); var edges5 = this.edges(); var cy = this.cy(); var opts = setOptions$3(options3); var id2position = {}; for (var i2 = 0; i2 < nodes7.length; i2++) { id2position[nodes7[i2].id()] = i2; } var n2 = nodes7.length, n22 = n2 * n2; var M2 = new Array(n22), _M; for (var _i = 0; _i < n22; _i++) { M2[_i] = 0; } for (var e3 = 0; e3 < edges5.length; e3++) { var edge = edges5[e3]; var _i2 = id2position[edge.source().id()]; var j2 = id2position[edge.target().id()]; var sim = getSimilarity$1(edge, opts.attributes); M2[_i2 * n2 + j2] += sim; M2[j2 * n2 + _i2] += sim; } addLoops(M2, n2, opts.multFactor); normalize2(M2, n2); var isStillMoving = true; var iterations = 0; while (isStillMoving && iterations < opts.maxIterations) { isStillMoving = false; _M = expand(M2, n2, opts.expandFactor); M2 = inflate(_M, n2, opts.inflateFactor); if (!hasConverged(M2, _M, n22, 4)) { isStillMoving = true; } iterations++; } var clusters = assign$2(M2, n2, nodes7, cy); clusters = removeDuplicates(clusters); return clusters; }, "markovClustering"); markovClustering$1 = { markovClustering, mcl: markovClustering }; identity5 = /* @__PURE__ */ __name(function identity6(x5) { return x5; }, "identity"); absDiff = /* @__PURE__ */ __name(function absDiff2(p3, q2) { return Math.abs(q2 - p3); }, "absDiff"); addAbsDiff = /* @__PURE__ */ __name(function addAbsDiff2(total, p3, q2) { return total + absDiff(p3, q2); }, "addAbsDiff"); addSquaredDiff = /* @__PURE__ */ __name(function addSquaredDiff2(total, p3, q2) { return total + Math.pow(q2 - p3, 2); }, "addSquaredDiff"); sqrt3 = /* @__PURE__ */ __name(function sqrt4(x5) { return Math.sqrt(x5); }, "sqrt"); maxAbsDiff = /* @__PURE__ */ __name(function maxAbsDiff2(currentMax, p3, q2) { return Math.max(currentMax, absDiff(p3, q2)); }, "maxAbsDiff"); getDistance = /* @__PURE__ */ __name(function getDistance2(length2, getP, getQ, init3, visit) { var post = arguments.length > 5 && arguments[5] !== void 0 ? arguments[5] : identity5; var ret = init3; var p3, q2; for (var dim = 0; dim < length2; dim++) { p3 = getP(dim); q2 = getQ(dim); ret = visit(ret, p3, q2); } 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 setOptions4(options3) { return defaults$b(options3); }, "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(nodes7, k2, attributes) { var ndim = attributes.length; var min9 = new Array(ndim); var max10 = new Array(ndim); var centroids = new Array(k2); var centroid = null; for (var i2 = 0; i2 < ndim; i2++) { min9[i2] = nodes7.min(attributes[i2]).value; max10[i2] = nodes7.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] - min9[_i]) + min9[_i]; } centroids[c3] = centroid; } return centroids; }, "randomCentroids"); classify = /* @__PURE__ */ __name(function classify2(node2, centroids, distance2, attributes, type3) { var min9 = Infinity; var index = 0; for (var i2 = 0; i2 < centroids.length; i2++) { var dist3 = getDist(distance2, node2, centroids[i2], attributes, type3); if (dist3 < min9) { min9 = dist3; index = i2; } } return index; }, "classify"); buildCluster = /* @__PURE__ */ __name(function buildCluster2(centroid, nodes7, assignment) { var cluster = []; var node2 = null; for (var n2 = 0; n2 < nodes7.length; n2++) { node2 = nodes7[n2]; if (assignment[node2.id()] === centroid) { cluster.push(node2); } } return cluster; }, "buildCluster"); haveValuesConverged = /* @__PURE__ */ __name(function haveValuesConverged2(v12, v22, sensitivityThreshold) { return Math.abs(v22 - v12) <= sensitivityThreshold; }, "haveValuesConverged"); haveMatricesConverged = /* @__PURE__ */ __name(function haveMatricesConverged2(v12, v22, sensitivityThreshold) { for (var i2 = 0; i2 < v12.length; i2++) { for (var j2 = 0; j2 < v12[i2].length; j2++) { var diff2 = Math.abs(v12[i2][j2] - v22[i2][j2]); 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(nodes7, k2) { var medoids = new Array(k2); if (nodes7.length < 50) { for (var i2 = 0; i2 < k2; i2++) { var node2 = nodes7[Math.floor(Math.random() * nodes7.length)]; while (seenBefore(node2, medoids, i2)) { node2 = nodes7[Math.floor(Math.random() * nodes7.length)]; } medoids[i2] = node2; } } else { for (var _i2 = 0; _i2 < k2; _i2++) { medoids[_i2] = nodes7[Math.floor(Math.random() * nodes7.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(options3) { var cy = this.cy(); var nodes7 = this.nodes(); var node2 = null; var opts = setOptions$2(options3); var clusters = new Array(opts.k); var assignment = {}; var centroids; if (opts.testMode) { if (typeof opts.testCentroids === "number") { opts.testCentroids; centroids = randomCentroids(nodes7, opts.k, opts.attributes); } else if (_typeof(opts.testCentroids) === "object") { centroids = opts.testCentroids; } else { centroids = randomCentroids(nodes7, opts.k, opts.attributes); } } else { centroids = randomCentroids(nodes7, opts.k, opts.attributes); } var isStillMoving = true; var iterations = 0; while (isStillMoving && iterations < opts.maxIterations) { for (var n2 = 0; n2 < nodes7.length; n2++) { node2 = nodes7[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, nodes7, 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 d2 = 0; d2 < ndim; d2++) { sum2[d2] = 0; for (var i2 = 0; i2 < cluster.length; i2++) { node2 = cluster[i2]; sum2[d2] += opts.attributes[d2](node2); } newCentroid[d2] = sum2[d2] / cluster.length; if (!haveValuesConverged(newCentroid[d2], centroid[d2], opts.sensitivityThreshold)) { isStillMoving = true; } } centroids[c3] = newCentroid; clusters[c3] = cy.collection(cluster); } iterations++; } return clusters; }, "kMeans"); kMedoids = /* @__PURE__ */ __name(function kMedoids2(options3) { var cy = this.cy(); var nodes7 = this.nodes(); var node2 = null; var opts = setOptions$2(options3); 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(nodes7, opts.k); } } else { medoids = randomMedoids(nodes7, opts.k); } var isStillMoving = true; var iterations = 0; while (isStillMoving && iterations < opts.maxIterations) { for (var n2 = 0; n2 < nodes7.length; n2++) { node2 = nodes7[n2]; assignment[node2.id()] = classify(node2, medoids, opts.distance, opts.attributes, "kMedoids"); } isStillMoving = false; for (var m2 = 0; m2 < medoids.length; m2++) { var cluster = buildCluster(m2, nodes7, assignment); if (cluster.length === 0) { continue; } minCosts[m2] = findCost(medoids[m2], cluster, opts.attributes); for (var _n = 0; _n < cluster.length; _n++) { curCost = findCost(cluster[_n], cluster, opts.attributes); if (curCost < minCosts[m2]) { minCosts[m2] = curCost; medoids[m2] = cluster[_n]; isStillMoving = true; } } clusters[m2] = cy.collection(cluster); } iterations++; } return clusters; }, "kMedoids"); updateCentroids = /* @__PURE__ */ __name(function updateCentroids2(centroids, nodes7, U2, weight8, opts) { var numerator, denominator; for (var n2 = 0; n2 < nodes7.length; n2++) { for (var c3 = 0; c3 < centroids.length; c3++) { weight8[n2][c3] = Math.pow(U2[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 < nodes7.length; _n2++) { numerator += weight8[_n2][_c] * opts.attributes[dim](nodes7[_n2]); denominator += weight8[_n2][_c]; } centroids[_c][dim] = numerator / denominator; } } }, "updateCentroids"); updateMembership = /* @__PURE__ */ __name(function updateMembership2(U2, _U, centroids, nodes7, opts) { for (var i2 = 0; i2 < U2.length; i2++) { _U[i2] = U2[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 < nodes7.length; n2++) { sum2 = 0; for (var k2 = 0; k2 < centroids.length; k2++) { numerator = getDist(opts.distance, nodes7[n2], centroids[c3], opts.attributes, "cmeans"); denominator = getDist(opts.distance, nodes7[n2], centroids[k2], opts.attributes, "cmeans"); sum2 += Math.pow(numerator / denominator, pow); } U2[n2][c3] = 1 / sum2; } } }, "updateMembership"); assign$1 = /* @__PURE__ */ __name(function assign3(nodes7, U2, 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 < U2.length; n2++) { max10 = -Infinity; index = -1; for (var _c2 = 0; _c2 < U2[0].length; _c2++) { if (U2[n2][_c2] > max10) { max10 = U2[n2][_c2]; index = _c2; } } clusters[index].push(nodes7[n2]); } for (var _c3 = 0; _c3 < clusters.length; _c3++) { clusters[_c3] = cy.collection(clusters[_c3]); } return clusters; }, "assign"); fuzzyCMeans = /* @__PURE__ */ __name(function fuzzyCMeans2(options3) { var cy = this.cy(); var nodes7 = this.nodes(); var opts = setOptions$2(options3); var clusters; var centroids; var U2; var _U; var weight8; _U = new Array(nodes7.length); for (var i2 = 0; i2 < nodes7.length; i2++) { _U[i2] = new Array(opts.k); } U2 = new Array(nodes7.length); for (var _i3 = 0; _i3 < nodes7.length; _i3++) { U2[_i3] = new Array(opts.k); } for (var _i4 = 0; _i4 < nodes7.length; _i4++) { var total = 0; for (var j2 = 0; j2 < opts.k; j2++) { U2[_i4][j2] = Math.random(); total += U2[_i4][j2]; } for (var _j = 0; _j < opts.k; _j++) { U2[_i4][_j] = U2[_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(nodes7.length); for (var _i6 = 0; _i6 < nodes7.length; _i6++) { weight8[_i6] = new Array(opts.k); } var isStillMoving = true; var iterations = 0; while (isStillMoving && iterations < opts.maxIterations) { isStillMoving = false; updateCentroids(centroids, nodes7, U2, weight8, opts); updateMembership(U2, _U, centroids, nodes7, opts); if (!haveMatricesConverged(U2, _U, opts.sensitivityThreshold)) { isStillMoving = true; } iterations++; } clusters = assign$1(nodes7, U2, opts, cy); return { clusters, degreeOfMembership: U2 }; }, "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 setOptions5(options3) { var opts = defaults$a(options3); 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 min9 = 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 < min9) { minKey = key; min9 = _dist; } } if (opts.mode === "threshold" && min9 >= 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 j2 = 0; j2 < clusters.length; j2++) { var key2 = clusters[j2].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 getAllChildren2(root4, arr, cy) { if (!root4) return; if (root4.value) { arr.push(root4.value); } else { if (root4.left) getAllChildren2(root4.left, arr); if (root4.right) getAllChildren2(root4.right, arr); } }, "getAllChildren"); buildDendrogram = /* @__PURE__ */ __name(function buildDendrogram2(root4, cy) { if (!root4) return ""; if (root4.left && root4.right) { var leftStr = buildDendrogram2(root4.left, cy); var rightStr = buildDendrogram2(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 buildClustersFromTree2(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 = buildClustersFromTree2(root4.left, k2 - 1, cy); if (root4.right) right3 = buildClustersFromTree2(root4.right, k2 - 1, cy); return left3.concat(right3); } } }, "buildClustersFromTree"); hierarchicalClustering = /* @__PURE__ */ __name(function hierarchicalClustering2(options3) { var cy = this.cy(); var nodes7 = this.nodes(); var opts = setOptions$1(options3); 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 < nodes7.length; n2++) { var cluster = { value: opts.mode === "dendrogram" ? nodes7[n2] : [nodes7[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 j2 = 0; j2 <= i2; j2++) { var dist3 = void 0; if (opts.mode === "dendrogram") { dist3 = i2 === j2 ? Infinity : getDist3(clusters[i2].value, clusters[j2].value); } else { dist3 = i2 === j2 ? Infinity : getDist3(clusters[i2].value[0], clusters[j2].value[0]); } dists[i2][j2] = dist3; dists[j2][i2] = dist3; if (dist3 < dists[i2][mins[i2]]) { mins[i2] = j2; } } } 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') ] }); setOptions6 = /* @__PURE__ */ __name(function setOptions7(options3) { var dmp = options3.damping; var pref = options3.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(options3); }, "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(S3, preference) { var p3 = null; if (preference === "median") { p3 = median(S3); } else if (preference === "mean") { p3 = mean(S3); } else if (preference === "min") { p3 = min5(S3); } else if (preference === "max") { p3 = max5(S3); } else { p3 = preference; } return p3; }, "getPreference"); findExemplars = /* @__PURE__ */ __name(function findExemplars2(n2, R2, A2) { var indices = []; for (var i2 = 0; i2 < n2; i2++) { if (R2[i2 * n2 + i2] + A2[i2 * n2 + i2] > 0) { indices.push(i2); } } return indices; }, "findExemplars"); assignClusters = /* @__PURE__ */ __name(function assignClusters2(n2, S3, 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 (S3[i2 * n2 + e3] > max10) { index = e3; max10 = S3[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"); assign4 = /* @__PURE__ */ __name(function assign5(n2, S3, exemplars) { var clusters = assignClusters(n2, S3, 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 j2 = 0; j2 < ii.length; j2++) { sum2 += S3[ii[j2] * n2 + ii[i2]]; } if (sum2 > maxSum) { maxI = i2; maxSum = sum2; } } exemplars[ei] = ii[maxI]; } clusters = assignClusters(n2, S3, exemplars); return clusters; }, "assign"); affinityPropagation = /* @__PURE__ */ __name(function affinityPropagation2(options3) { var cy = this.cy(); var nodes7 = this.nodes(); var opts = setOptions6(options3); var id2position = {}; for (var i2 = 0; i2 < nodes7.length; i2++) { id2position[nodes7[i2].id()] = i2; } var n2; var n22; var S3; var p3; var R2; var A2; n2 = nodes7.length; n22 = n2 * n2; S3 = new Array(n22); for (var _i = 0; _i < n22; _i++) { S3[_i] = -Infinity; } for (var _i2 = 0; _i2 < n2; _i2++) { for (var j2 = 0; j2 < n2; j2++) { if (_i2 !== j2) { S3[_i2 * n2 + j2] = getSimilarity2(opts.distance, nodes7[_i2], nodes7[j2], opts.attributes); } } } p3 = getPreference(S3, opts.preference); for (var _i3 = 0; _i3 < n2; _i3++) { S3[_i3 * n2 + _i3] = p3; } R2 = new Array(n22); for (var _i4 = 0; _i4 < n22; _i4++) { R2[_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 se = new Array(n2); for (var _i6 = 0; _i6 < n2; _i6++) { old[_i6] = 0; Rp[_i6] = 0; se[_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] = R2[_i8 * n2 + _j]; AS = A2[_i8 * n2 + _j] + S3[_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++) { R2[_i8 * n2 + _j2] = (1 - opts.damping) * (S3[_i8 * n2 + _j2] - max10) + opts.damping * old[_j2]; } R2[_i8 * n2 + maxI] = (1 - opts.damping) * (S3[_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, R2[_j3 * n2 + _i9]); sum2 += Rp[_j3]; } sum2 -= Rp[_i9]; Rp[_i9] = R2[_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 K4 = 0; for (var _i10 = 0; _i10 < n2; _i10++) { var E2 = A2[_i10 * n2 + _i10] + R2[_i10 * n2 + _i10] > 0 ? 1 : 0; e3[iter % opts.minIterations * n2 + _i10] = E2; K4 += E2; } if (K4 > 0 && (iter >= opts.minIterations - 1 || iter == opts.maxIterations - 1)) { var _sum = 0; for (var _i11 = 0; _i11 < n2; _i11++) { se[_i11] = 0; for (var _j5 = 0; _j5 < opts.minIterations; _j5++) { se[_i11] += e3[_j5 * n2 + _i11]; } if (se[_i11] === 0 || se[_i11] === opts.minIterations) { _sum++; } } if (_sum === n2) { break; } } } var exemplarsIndices = findExemplars(n2, R2, A2); var clusterIndices = assign4(n2, S3, exemplarsIndices); var clusters = {}; for (var c3 = 0; c3 < exemplarsIndices.length; c3++) { clusters[exemplarsIndices[c3]] = []; } for (var _i12 = 0; _i12 < nodes7.length; _i12++) { var pos = id2position[nodes7[_i12].id()]; var clusterIndex = clusterIndices[pos]; if (clusterIndex != null) { clusters[clusterIndex].push(nodes7[_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(options3) { if (!plainObject(options3)) { var args = arguments; options3 = { root: args[0], directed: args[1] }; } var _hierholzerDefaults = hierholzerDefaults(options3), 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 nodes7 = {}; var edges5 = {}; if (directed) { eles.forEach(function(ele) { var id28 = 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 = id28; } else if (d22 == 1) { if (oddOut) dflag = true; else oddOut = id28; } else if (d22 > 1 || d1 > 1) { dflag = true; } nodes7[id28] = []; ele.outgoers().forEach(function(e3) { if (e3.isEdge()) nodes7[id28].push(e3.id()); }); } else { edges5[id28] = [void 0, ele.target().id()]; } }); } else { eles.forEach(function(ele) { var id28 = ele.id(); if (ele.isNode()) { var d3 = ele.degree(true); if (d3 % 2) { if (!oddIn) oddIn = id28; else if (!oddOut) oddOut = id28; else dflag = true; } nodes7[id28] = []; ele.connectedEdges().forEach(function(e3) { return nodes7[id28].push(e3.id()); }); } else { edges5[id28] = [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 (nodes7[currentNode].length) { adj = nodes7[currentNode].shift(); adjTail = edges5[adj][0]; adjHead = edges5[adj][1]; if (currentNode != adjHead) { nodes7[adjHead] = nodes7[adjHead].filter(function(e3) { return e3 != adj; }); currentNode = adjHead; } else if (!directed && currentNode != adjTail) { nodes7[adjTail] = nodes7[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 (nodes7[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 d2 in nodes7) { if (nodes7[d2].length) { return result; } } result.found = true; result.trail = this.spawn(trail, true); return result; }, "hierholzer") }; hopcroftTarjanBiconnected = /* @__PURE__ */ __name(function hopcroftTarjanBiconnected2() { var eles = this; var nodes7 = {}; var id28 = 0; var edgeCount3 = 0; var components3 = []; var stack = []; var visitedEdges = {}; var buildComponent = /* @__PURE__ */ __name(function buildComponent2(x5, y5) { var i2 = stack.length - 1; var cutset = []; var component2 = eles.spawn(); while (stack[i2].x != x5 || stack[i2].y != y5) { 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 (!nodes7[nodeId].cutVertex) { component2.merge(connectedEdges); } else { component2.merge(connectedEdges.filter(function(edge2) { return edge2.isLoop(); })); } }); }); components3.push(component2); }, "buildComponent"); var biconnectedSearch = /* @__PURE__ */ __name(function biconnectedSearch2(root4, currentNode, parent4) { if (root4 === parent4) edgeCount3 += 1; nodes7[currentNode] = { id: id28, low: id28++, cutVertex: false }; var edges5 = eles.getElementById(currentNode).connectedEdges().intersection(eles); if (edges5.size() === 0) { components3.push(eles.spawn(eles.getElementById(currentNode))); } else { var sourceId, targetId, otherNodeId, edgeId; edges5.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 nodes7)) { biconnectedSearch2(root4, otherNodeId, currentNode); nodes7[currentNode].low = Math.min(nodes7[currentNode].low, nodes7[otherNodeId].low); if (nodes7[currentNode].id <= nodes7[otherNodeId].low) { nodes7[currentNode].cutVertex = true; buildComponent(currentNode, otherNodeId); } } else { nodes7[currentNode].low = Math.min(nodes7[currentNode].low, nodes7[otherNodeId].id); } } }); } }, "biconnectedSearch"); eles.forEach(function(ele) { if (ele.isNode()) { var nodeId = ele.id(); if (!(nodeId in nodes7)) { edgeCount3 = 0; biconnectedSearch(nodeId, nodeId); nodes7[nodeId].cutVertex = edgeCount3 > 1; } } }); var cutVertices = Object.keys(nodes7).filter(function(id29) { return nodes7[id29].cutVertex; }).map(function(id29) { return eles.getElementById(id29); }); 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 nodes7 = {}; var index = 0; var components3 = []; var stack = []; var cut = eles.spawn(eles); var stronglyConnectedSearch = /* @__PURE__ */ __name(function stronglyConnectedSearch2(sourceNodeId) { stack.push(sourceNodeId); nodes7[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 nodes7)) { stronglyConnectedSearch2(targetNodeId); } if (!nodes7[targetNodeId].explored) { nodes7[sourceNodeId].low = Math.min(nodes7[sourceNodeId].low, nodes7[targetNodeId].low); } } }); if (nodes7[sourceNodeId].index === nodes7[sourceNodeId].low) { var componentNodes = eles.spawn(); for (; ; ) { var nodeId = stack.pop(); componentNodes.merge(eles.getElementById(nodeId)); nodes7[nodeId].low = nodes7[sourceNodeId].index; nodes7[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 nodes7)) { 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 api2(executor) { if (!(this instanceof api2)) return new api2(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 reject2(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, state5, name, value2) { if (curr.state === STATE_PENDING) { curr.state = state5; 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 resolve2(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(y5) { if (resolved) return; resolved = true; if (y5 === x5) promise4.reject(new TypeError("circular thenable chain")); else resolve2(promise4, y5); }, /* 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(resolve3, reject3) { resolve3(val); }); }; api.reject = function(val) { return new api(function(resolve3, 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 q2; var tAni = _p.target._private.animation; if (_p.queue) { q2 = tAni.queue; } else { q2 = tAni.current; } q2.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, b2) { var _pa = _p[a2]; if (_pa == null) { return; } _p[a2] = _p[b2]; _p[b2] = _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(resolve3, reject3) { arr.push(function() { resolve3(); }); }); }, "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 j2 = 0; j2 < anis.length; j2++) { var ani = anis[j2]; 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 }; isArray2 = Array.isArray; isArray_1 = isArray2; reIsDeepProp2 = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/; reIsPlainProp2 = /^\w*$/; __name(isKey2, "isKey"); _isKey = isKey2; asyncTag2 = "[object AsyncFunction]"; funcTag4 = "[object Function]"; genTag3 = "[object GeneratorFunction]"; proxyTag2 = "[object Proxy]"; __name(isFunction2, "isFunction"); isFunction_1 = isFunction2; coreJsData2 = _root["__core-js_shared__"]; _coreJsData = coreJsData2; maskSrcKey2 = function() { var uid = /[^.]+$/.exec(_coreJsData && _coreJsData.keys && _coreJsData.keys.IE_PROTO || ""); return uid ? "Symbol(src)_1." + uid : ""; }(); __name(isMasked2, "isMasked"); _isMasked = isMasked2; funcProto$1 = Function.prototype; funcToString$1 = funcProto$1.toString; __name(toSource2, "toSource"); _toSource = toSource2; reRegExpChar2 = /[\\^$.*+?()[\]{}|]/g; reIsHostCtor2 = /^\[object .+?Constructor\]$/; funcProto4 = Function.prototype; objectProto$3 = Object.prototype; funcToString4 = funcProto4.toString; hasOwnProperty$3 = objectProto$3.hasOwnProperty; reIsNative2 = RegExp( "^" + funcToString4.call(hasOwnProperty$3).replace(reRegExpChar2, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$" ); __name(baseIsNative2, "baseIsNative"); _baseIsNative = baseIsNative2; __name(getValue$1, "getValue$1"); _getValue = getValue$1; __name(getNative2, "getNative"); _getNative = getNative2; nativeCreate2 = _getNative(Object, "create"); _nativeCreate = nativeCreate2; __name(hashClear2, "hashClear"); _hashClear = hashClear2; __name(hashDelete2, "hashDelete"); _hashDelete = hashDelete2; HASH_UNDEFINED$1 = "__lodash_hash_undefined__"; objectProto$2 = Object.prototype; hasOwnProperty$2 = objectProto$2.hasOwnProperty; __name(hashGet2, "hashGet"); _hashGet = hashGet2; objectProto$1 = Object.prototype; hasOwnProperty$1 = objectProto$1.hasOwnProperty; __name(hashHas2, "hashHas"); _hashHas = hashHas2; HASH_UNDEFINED4 = "__lodash_hash_undefined__"; __name(hashSet2, "hashSet"); _hashSet = hashSet2; __name(Hash2, "Hash"); Hash2.prototype.clear = _hashClear; Hash2.prototype["delete"] = _hashDelete; Hash2.prototype.get = _hashGet; Hash2.prototype.has = _hashHas; Hash2.prototype.set = _hashSet; _Hash = Hash2; __name(listCacheClear2, "listCacheClear"); _listCacheClear = listCacheClear2; __name(eq2, "eq"); eq_1 = eq2; __name(assocIndexOf2, "assocIndexOf"); _assocIndexOf = assocIndexOf2; arrayProto2 = Array.prototype; splice2 = arrayProto2.splice; __name(listCacheDelete2, "listCacheDelete"); _listCacheDelete = listCacheDelete2; __name(listCacheGet2, "listCacheGet"); _listCacheGet = listCacheGet2; __name(listCacheHas2, "listCacheHas"); _listCacheHas = listCacheHas2; __name(listCacheSet2, "listCacheSet"); _listCacheSet = listCacheSet2; __name(ListCache2, "ListCache"); ListCache2.prototype.clear = _listCacheClear; ListCache2.prototype["delete"] = _listCacheDelete; ListCache2.prototype.get = _listCacheGet; ListCache2.prototype.has = _listCacheHas; ListCache2.prototype.set = _listCacheSet; _ListCache = ListCache2; Map$1 = _getNative(_root, "Map"); _Map = Map$1; __name(mapCacheClear2, "mapCacheClear"); _mapCacheClear = mapCacheClear2; __name(isKeyable2, "isKeyable"); _isKeyable = isKeyable2; __name(getMapData2, "getMapData"); _getMapData = getMapData2; __name(mapCacheDelete2, "mapCacheDelete"); _mapCacheDelete = mapCacheDelete2; __name(mapCacheGet2, "mapCacheGet"); _mapCacheGet = mapCacheGet2; __name(mapCacheHas2, "mapCacheHas"); _mapCacheHas = mapCacheHas2; __name(mapCacheSet2, "mapCacheSet"); _mapCacheSet = mapCacheSet2; __name(MapCache2, "MapCache"); MapCache2.prototype.clear = _mapCacheClear; MapCache2.prototype["delete"] = _mapCacheDelete; MapCache2.prototype.get = _mapCacheGet; MapCache2.prototype.has = _mapCacheHas; MapCache2.prototype.set = _mapCacheSet; _MapCache = MapCache2; FUNC_ERROR_TEXT3 = "Expected a function"; __name(memoize3, "memoize"); memoize3.Cache = _MapCache; memoize_1 = memoize3; MAX_MEMOIZE_SIZE2 = 500; __name(memoizeCapped2, "memoizeCapped"); _memoizeCapped = memoizeCapped2; rePropName2 = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; reEscapeChar2 = /\\(\\)?/g; stringToPath2 = _memoizeCapped(function(string3) { var result = []; if (string3.charCodeAt(0) === 46) { result.push(""); } string3.replace(rePropName2, function(match2, number7, quote, subString) { result.push(quote ? subString.replace(reEscapeChar2, "$1") : number7 || match2); }); return result; }); _stringToPath = stringToPath2; __name(arrayMap2, "arrayMap"); _arrayMap = arrayMap2; INFINITY$1 = 1 / 0; symbolProto4 = _Symbol ? _Symbol.prototype : void 0; symbolToString2 = symbolProto4 ? symbolProto4.toString : void 0; __name(baseToString2, "baseToString"); _baseToString = baseToString2; __name(toString$1, "toString$1"); toString_1 = toString$1; __name(castPath2, "castPath"); _castPath = castPath2; INFINITY5 = 1 / 0; __name(toKey2, "toKey"); _toKey = toKey2; __name(baseGet2, "baseGet"); _baseGet = baseGet2; __name(get5, "get"); get_1 = get5; defineProperty2 = function() { try { var func = _getNative(Object, "defineProperty"); func({}, "", {}); return func; } catch (e3) { } }(); _defineProperty = defineProperty2; __name(baseAssignValue2, "baseAssignValue"); _baseAssignValue = baseAssignValue2; objectProto22 = Object.prototype; hasOwnProperty19 = objectProto22.hasOwnProperty; __name(assignValue2, "assignValue"); _assignValue = assignValue2; MAX_SAFE_INTEGER3 = 9007199254740991; reIsUint2 = /^(?:0|[1-9]\d*)$/; __name(isIndex2, "isIndex"); _isIndex = isIndex2; __name(baseSet2, "baseSet"); _baseSet = baseSet2; __name(set5, "set"); set_1 = set5; __name(copyArray3, "copyArray"); _copyArray = copyArray3; __name(toPath, "toPath"); toPath_1 = toPath; define$2 = { // access data field data: /* @__PURE__ */ __name(function data(params) { var defaults4 = { 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({}, defaults4, 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_1(name); if (p3.allowGetting && value2 === void 0) { var ret; if (single) { p3.beforeGet(single); if (path4 && single._private[p3.field][name] === void 0) { ret = get_1(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, l2 = all.length; i2 < l2; i2++) { var ele = all[i2]; if (p3.canSet(ele)) { if (path4 && single._private[p3.field][name] === void 0) { set_1(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 j2 = 0; j2 < all.length; j2++) { var _ele = all[j2]; 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 defaults4 = { field: "data", event: "data", triggerFnName: "trigger", triggerEvent: false, immutableKeys: {} // key => true if immutable }; params = extend4({}, defaults4, 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 l2 = keys3.length; for (var i2 = 0; i2 < l2; 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(resolve3, reject3) { var callback = /* @__PURE__ */ __name(function callback2(e3) { self2.off.apply(self2, offArgs); resolve3(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(m2) { extend4(define2, m2); }); 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 classes4(_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 j2 = 0; j2 < self2.length; j2++) { var ele = self2[j2]; 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 addClass4(classes6) { return this.toggleClass(classes6, 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(classes6, toggle) { if (!array2(classes6)) { classes6 = classes6.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 j2 = 0; j2 < classes6.length; j2++) { var cls = classes6[j2]; 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(classes6) { return this.toggleClass(classes6, false); }, "removeClass"), flashClass: /* @__PURE__ */ __name(function flashClass(classes6, duration) { var self2 = this; if (duration == null) { duration = 250; } else if (duration === 0) { return self2; } self2.addClass(classes6); setTimeout(function() { self2.removeClass(classes6); }, 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"); Type3 = { /** 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, b2) { return descending2(a2.selector, b2.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(match2, $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 populate2(selector, query, _ref) { var _ref2 = _slicedToArray(_ref, 1), group2 = _ref2[0]; query.checks.push({ type: Type3.GROUP, value: group2 === "*" ? group2 : group2 + "s" }); }, "populate") }, { name: "state", query: true, regex: stateSelectorRegex, populate: /* @__PURE__ */ __name(function populate3(selector, query, _ref3) { var _ref4 = _slicedToArray(_ref3, 1), state5 = _ref4[0]; query.checks.push({ type: Type3.STATE, value: state5 }); }, "populate") }, { name: "id", query: true, regex: "\\#(" + tokens.id + ")", populate: /* @__PURE__ */ __name(function populate4(selector, query, _ref5) { var _ref6 = _slicedToArray(_ref5, 1), id28 = _ref6[0]; query.checks.push({ type: Type3.ID, value: cleanMetaChars(id28) }); }, "populate") }, { name: "className", query: true, regex: "\\.(" + tokens.className + ")", populate: /* @__PURE__ */ __name(function populate5(selector, query, _ref7) { var _ref8 = _slicedToArray(_ref7, 1), className = _ref8[0]; query.checks.push({ type: Type3.CLASS, value: cleanMetaChars(className) }); }, "populate") }, { name: "dataExists", query: true, regex: "\\[\\s*(" + tokens.variable + ")\\s*\\]", populate: /* @__PURE__ */ __name(function populate6(selector, query, _ref9) { var _ref10 = _slicedToArray(_ref9, 1), variable = _ref10[0]; query.checks.push({ type: Type3.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 populate7(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: Type3.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 populate8(selector, query, _ref13) { var _ref14 = _slicedToArray(_ref13, 2), boolOp = _ref14[0], variable = _ref14[1]; query.checks.push({ type: Type3.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 populate9(selector, query, _ref15) { var _ref16 = _slicedToArray(_ref15, 3), meta3 = _ref16[0], comparatorOp = _ref16[1], number7 = _ref16[2]; query.checks.push({ type: Type3.META_COMPARE, field: cleanMetaChars(meta3), operator: comparatorOp, value: parseFloat(number7) }); }, "populate") }, { name: "nextQuery", separator: true, regex: tokens.separator, populate: /* @__PURE__ */ __name(function populate10(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 populate11(selector, query) { if (selector.currentSubject == null) { var edgeQuery = newQuery(); var source = query; var target = newQuery(); edgeQuery.checks.push({ type: Type3.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: Type3.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 populate12(selector, query) { if (selector.currentSubject == null) { var edgeQuery = newQuery(); var source = query; var target = newQuery(); edgeQuery.checks.push({ type: Type3.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: Type3.NODE_NEIGHBOR, node: node2, neighbor }); replaceLastQuery(selector, query, nhoodQ); return neighbor; } }, "populate") }, { name: "child", separator: true, regex: tokens.child, populate: /* @__PURE__ */ __name(function populate13(selector, query) { if (selector.currentSubject == null) { var parentChildQuery = newQuery(); var child = newQuery(); var parent4 = selector[selector.length - 1]; parentChildQuery.checks.push({ type: Type3.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: Type3.COMPOUND_SPLIT, left: left3, right: right3, subject }); subject.checks = query.checks; query.checks = [{ type: Type3.TRUE }]; _parent.checks.push({ type: Type3.TRUE }); right3.checks.push({ type: Type3.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: Type3.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 populate14(selector, query) { if (selector.currentSubject == null) { var ancChQuery = newQuery(); var descendant = newQuery(); var ancestor = selector[selector.length - 1]; ancChQuery.checks.push({ type: Type3.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: Type3.COMPOUND_SPLIT, left: left3, right: right3, subject }); subject.checks = query.checks; query.checks = [{ type: Type3.TRUE }]; _ancestor.checks.push({ type: Type3.TRUE }); right3.checks.push({ type: Type3.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: Type3.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 populate15(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 === Type3.DIRECTED_EDGE) { topChk.type = Type3.NODE_TARGET; } else if (topType === Type3.UNDIRECTED_EDGE) { topChk.type = Type3.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 match2; var name; for (var j2 = 0; j2 < exprs.length; j2++) { var e3 = exprs[j2]; var n2 = e3.name; var m2 = remaining.match(e3.regexObj); if (m2 != null) { match2 = m2; expr = e3; name = n2; var consumed = m2[0]; remaining = remaining.substring(consumed.length); break; } } return { expr, match: match2, name, remaining }; }, "consumeExpr"); consumeWhitespace = /* @__PURE__ */ __name(function consumeWhitespace2(remaining) { var match2 = remaining.match(/^\s+/); if (match2) { var consumed = match2[0]; remaining = remaining.substring(consumed.length); } return remaining; }, "consumeWhitespace"); parse3 = /* @__PURE__ */ __name(function parse4(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 q2 = self2[i2]; if (q2.compoundCount > 0 && q2.edgeCount > 0) { warn("The selector `" + selector + "` is invalid because it uses both a compound selector and an edge selector"); return false; } if (q2.edgeCount > 1) { warn("The selector `" + selector + "` is invalid because it uses multiple edge selectors"); return false; } else if (q2.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"); toString4 = /* @__PURE__ */ __name(function toString5() { 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 Type3.GROUP: { var group2 = clean(value2); return group2.substring(0, group2.length - 1); } case Type3.DATA_COMPARE: { var field = check.field, operator = check.operator; return "[" + field + space(clean(operator)) + cleanVal(value2) + "]"; } case Type3.DATA_BOOL: { var _operator = check.operator, _field = check.field; return "[" + clean(_operator) + _field + "]"; } case Type3.DATA_EXIST: { var _field2 = check.field; return "[" + _field2 + "]"; } case Type3.META_COMPARE: { var _operator2 = check.operator, _field3 = check.field; return "[[" + _field3 + space(clean(_operator2)) + cleanVal(value2) + "]]"; } case Type3.STATE: { return value2; } case Type3.ID: { return "#" + value2; } case Type3.CLASS: { return "." + value2; } case Type3.PARENT: case Type3.CHILD: { return queryToString(check.parent, subject) + space(">") + queryToString(check.child, subject); } case Type3.ANCESTOR: case Type3.DESCENDANT: { return queryToString(check.ancestor, subject) + " " + queryToString(check.descendant, subject); } case Type3.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 Type3.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: parse3, toString: toString4 }; 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[Type3.GROUP] = function(check, ele) { var group2 = check.value; return group2 === "*" || group2 === ele.group(); }; match[Type3.STATE] = function(check, ele) { var stateSelector = check.value; return stateSelectorMatches(stateSelector, ele); }; match[Type3.ID] = function(check, ele) { var id28 = check.value; return ele.id() === id28; }; match[Type3.CLASS] = function(check, ele) { var cls = check.value; return ele.hasClass(cls); }; match[Type3.META_COMPARE] = function(check, ele) { var field = check.field, operator = check.operator, value2 = check.value; return valCmp(meta(ele, field), operator, value2); }; match[Type3.DATA_COMPARE] = function(check, ele) { var field = check.field, operator = check.operator, value2 = check.value; return valCmp(data$1(ele, field), operator, value2); }; match[Type3.DATA_BOOL] = function(check, ele) { var field = check.field, operator = check.operator; return boolCmp(data$1(ele, field), operator); }; match[Type3.DATA_EXIST] = function(check, ele) { var field = check.field; check.operator; return existCmp(data$1(ele, field)); }; match[Type3.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[Type3.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[Type3.DIRECTED_EDGE] = function(check, ele) { return matches$1(check.source, ele.source()) && matches$1(check.target, ele.target()); }; match[Type3.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[Type3.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[Type3.CHILD] = function(check, ele) { return matches$1(check.child, ele) && matches$1(check.parent, ele.parent()); }; match[Type3.PARENT] = function(check, ele) { return matches$1(check.parent, ele) && ele.children().some(function(c3) { return matches$1(check.child, c3); }); }; match[Type3.DESCENDANT] = function(check, ele) { return matches$1(check.descendant, ele) && ele.ancestors().some(function(a2) { return matches$1(check.ancestor, a2); }); }; match[Type3.ANCESTOR] = function(check, ele) { return matches$1(check.ancestor, ele) && ele.descendants().some(function(d2) { return matches$1(check.descendant, d2); }); }; match[Type3.COMPOUND_SPLIT] = function(check, ele) { return matches$1(check.subject, ele) && matches$1(check.left, ele) && matches$1(check.right, ele); }; match[Type3.TRUE] = function() { return true; }; match[Type3.COLLECTION] = function(check, ele) { var collection4 = check.value; return collection4.has(ele); }; match[Type3.FILTER] = function(check, ele) { var filter6 = check.value; return filter6(ele); }; filter3 = /* @__PURE__ */ __name(function filter4(collection4) { var self2 = this; if (self2.length === 1 && self2[0].checks.length === 1 && self2[0].checks[0].type === Type3.ID) { return collection4.getElementById(self2[0].checks[0].value).collection(); } var selectorFunction = /* @__PURE__ */ __name(function selectorFunction2(element3) { for (var j2 = 0; j2 < self2.length; j2++) { var query = self2[j2]; 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 j2 = 0; j2 < self2.length; j2++) { var query = self2[j2]; 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: Type3.COLLECTION, value: selector.collection() }] }); } else if (fn$6(selector)) { this.addQuery({ checks: [{ type: Type3.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(q2) { this[this.length++] = q2; }; 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 some2(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 every2(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 contains3(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 = hashString(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 j2 = 0; j2 < eleChildren.length; j2++) { children2.push(eleChildren[j2]); } } 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 elements4 = []; function add3(eles) { for (var i2 = 0; i2 < eles.length; i2++) { var ele = eles[i2]; elements4.push(ele); if (ele.children().nonempty()) { add3(ele.children()); } } } __name(add3, "add"); add3(this.children()); return this.spawn(elements4, 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 id21() { 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, min9) { return degree < min9; }), maxDegree: defineDegreeBoundsFunction("degree", function(degree, max10) { return degree > max10; }), minIndegree: defineDegreeBoundsFunction("indegree", function(degree, min9) { return degree < min9; }), maxIndegree: defineDegreeBoundsFunction("indegree", function(degree, max10) { return degree > max10; }), minOutdegree: defineDegreeBoundsFunction("outdegree", function(degree, min9) { return degree < min9; }), maxOutdegree: defineDegreeBoundsFunction("outdegree", function(degree, max10) { return degree > max10; }) }); extend4(elesfn$d, { totalDegree: /* @__PURE__ */ __name(function totalDegree(includeLoops) { var total = 0; var nodes7 = this.nodes(); for (var i2 = 0; i2 < nodes7.length; i2++) { total += nodes7[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(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(options3) { var bb = this.boundingBox(options3); 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 min9 = { 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 = min9.width.left.value; if (min9.width.left.units === "px" && min9.width.val > 0) { leftVal = leftVal * 100 / min9.width.val; } var rightVal = min9.width.right.value; if (min9.width.right.units === "px" && min9.width.val > 0) { rightVal = rightVal * 100 / min9.width.val; } var topVal = min9.height.top.value; if (min9.height.top.units === "px" && min9.height.val > 0) { topVal = topVal * 100 / min9.height.val; } var bottomVal = min9.height.bottom.value; if (min9.height.bottom.units === "px" && min9.height.val > 0) { bottomVal = bottomVal * 100 / min9.height.val; } var widthBiasDiffs = computeBiasValues(min9.width.val - bb.w, leftVal, rightVal); var diffLeft = widthBiasDiffs.biasDiff; var diffRight = widthBiasDiffs.biasComplementDiff; var heightBiasDiffs = computeBiasValues(min9.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, min9.width.val); pos.x = (-diffLeft + bb.x1 + bb.x2 + diffRight) / 2; _p2.autoHeight = Math.max(bb.h, min9.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(b2, x1, y1, x22, y22) { if (x22 - x1 === 0 || y22 - y1 === 0) { return; } if (x1 == null || y1 == null || x22 == null || y22 == null) { return; } b2.x1 = x1 < b2.x1 ? x1 : b2.x1; b2.x2 = x22 > b2.x2 ? x22 : b2.x2; b2.y1 = y1 < b2.y1 ? y1 : b2.y1; b2.y2 = y22 > b2.y2 ? y22 : b2.y2; b2.w = b2.x2 - b2.x1; b2.h = b2.y2 - b2.y1; }, "updateBounds"); updateBoundsFromBox = /* @__PURE__ */ __name(function updateBoundsFromBox2(b2, b22) { if (b22 == null) { return b2; } return updateBounds(b2, 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 y5; if (arrowType !== "none") { if (prefix === "source") { x5 = rstyle.srcX; y5 = rstyle.srcY; } else if (prefix === "target") { x5 = rstyle.tgtX; y5 = rstyle.tgtY; } else { x5 = rstyle.midX; y5 = rstyle.midY; } var bbs = _p.arrowBounds = _p.arrowBounds || {}; var bb = bbs[prefix] = bbs[prefix] || {}; bb.x1 = x5 - halfArW; bb.y1 = y5 - halfArW; bb.x2 = x5 + halfArW; bb.y2 = y5 + 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 padding2 = 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; } } lx1 += marginX - Math.max(outlineWidth, halfBorderWidth) - padding2 - marginOfError; lx2 += marginX + Math.max(outlineWidth, halfBorderWidth) + padding2 + marginOfError; ly1 += marginY - Math.max(outlineWidth, halfBorderWidth) - padding2 - marginOfError; ly2 += marginY + Math.max(outlineWidth, halfBorderWidth) + padding2 + marginOfError; 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; 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 rotate = /* @__PURE__ */ __name(function rotate2(x5, y5) { x5 = x5 - xo; y5 = y5 - yo; return { x: x5 * cos3 - y5 * sin3 + xo, y: x5 * sin3 + y5 * cos3 + yo }; }, "rotate"); var px1y1 = rotate(lx1, ly1); var px1y2 = rotate(lx1, ly2); var px2y1 = rotate(lx2, ly1); var px2y2 = rotate(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; if (outlineOpacity > 0 && outlineWidth > 0) { var outlineOffset = ele.pstyle("outline-offset").value; var nodeShape = ele.pstyle("shape").value; var outlineSize = outlineWidth + outlineOffset; var scaleX = (bounds4.w + outlineSize * 2) / bounds4.w; var scaleY = (bounds4.h + outlineSize * 2) / bounds4.h; var xOffset = 0; var yOffset = 0; if (["diamond", "pentagon", "round-triangle"].includes(nodeShape)) { scaleX = (bounds4.w + outlineSize * 2.4) / bounds4.w; yOffset = -outlineSize / 3.6; } else if (["concave-hexagon", "rhomboid", "right-rhomboid"].includes(nodeShape)) { scaleX = (bounds4.w + outlineSize * 2.4) / bounds4.w; } else if (nodeShape === "star") { scaleX = (bounds4.w + outlineSize * 2.8) / bounds4.w; scaleY = (bounds4.h + outlineSize * 2.6) / bounds4.h; yOffset = -outlineSize / 3.8; } else if (nodeShape === "triangle") { scaleX = (bounds4.w + outlineSize * 2.8) / bounds4.w; scaleY = (bounds4.h + outlineSize * 2.4) / bounds4.h; yOffset = -outlineSize / 1.4; } else if (nodeShape === "vee") { scaleX = (bounds4.w + outlineSize * 4.4) / bounds4.w; scaleY = (bounds4.h + outlineSize * 3.8) / bounds4.h; yOffset = -outlineSize * 0.5; } var hDelta = bounds4.h * scaleY - bounds4.h; var wDelta = bounds4.w * scaleX - bounds4.w; expandBoundingBoxSides(bounds4, [Math.ceil(hDelta / 2), Math.ceil(wDelta / 2)]); if (xOffset != 0 || yOffset !== 0) { var oBounds = shiftBoundingBox(bounds4, xOffset, yOffset); updateBoundingBox(bounds4, oBounds); } } }, "updateBoundsFromOutline"); boundingBoxImpl = /* @__PURE__ */ __name(function boundingBoxImpl2(ele, options3) { 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, y5; 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 && options3.includeOverlays) { overlayOpacity = ele.pstyle("overlay-opacity").value; if (overlayOpacity !== 0) { overlayPadding = ele.pstyle("overlay-padding").value; } } var underlayOpacity = 0; var underlayPadding = 0; if (styleEnabled2 && options3.includeUnderlays) { underlayOpacity = ele.pstyle("underlay-opacity").value; if (underlayOpacity !== 0) { underlayPadding = ele.pstyle("underlay-padding").value; } } var padding2 = Math.max(overlayPadding, underlayPadding); var w3 = 0; var wHalf = 0; if (styleEnabled2) { w3 = ele.pstyle("width").pfValue; wHalf = w3 / 2; } if (isNode2 && options3.includeNodes) { var pos = ele.position(); x5 = pos.x; y5 = pos.y; var _w = ele.outerWidth(); var halfW = _w / 2; var h2 = ele.outerHeight(); var halfH = h2 / 2; ex1 = x5 - halfW; ex2 = x5 + halfW; ey1 = y5 - halfH; ey2 = y5 + halfH; updateBounds(bounds4, ex1, ey1, ex2, ey2); if (styleEnabled2 && options3.includeOutlines) { updateBoundsFromOutline(bounds4, ele); } } else if (isEdge2 && options3.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" || curveStyle.endsWith("segments") || curveStyle.endsWith("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 j2 = 0; j2 < pts2.length; j2++) { var pt = pts2[j2]; 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 && options3.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 - padding2, ey1 - padding2, ex2 + padding2, ey2 + padding2); } 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 && options3.includeLabels) { if (options3.includeMainLabels) { updateBoundsFromLabel(bounds4, ele, null); } if (isEdge2) { if (options3.includeSourceLabels) { updateBoundsFromLabel(bounds4, ele, "source"); } if (options3.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) { if (ele.isEdge()) { var p1 = ele.source().position(); var p22 = ele.target().position(); var r2 = /* @__PURE__ */ __name(function r3(x5) { return Math.round(x5); }, "r"); return hashIntsArray([r2(p1.x), r2(p1.y), r2(p22.x), r2(p22.y)]); } else { return 0; } }, "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; var currPosKey = getBoundingBoxPosKey(ele); var isPosKeySame = _p.bbCachePosKey === currPosKey; var useCache = opts.useCache && isPosKeySame; var isDirty = /* @__PURE__ */ __name(function isDirty2(ele2) { return ele2._private.bbCache == null || ele2._private.styleDirty; }, "isDirty"); var needRecalc = !useCache || isDirty(ele) || isEdge2 && isDirty(ele.source()) || isDirty(ele.target()); if (needRecalc) { if (!isPosKeySame) { ele.recalculateRenderedStyle(useCache); } bb = boundingBoxImpl(ele, defBbOpts); _p.bbCache = bb; _p.bbCachePosKey = currPosKey; } 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(options3) { var bounds4; if (this.length === 1 && this[0]._private.bbCache != null && !this[0]._private.styleDirty && (options3 === void 0 || options3.useCache === void 0 || options3.useCache === true)) { if (options3 === void 0) { options3 = defBbOpts; } else { options3 = filledBbOpts(options3); } bounds4 = cachedBoundingBoxImpl(this[0], options3); } else { bounds4 = makeBoundingBox(); options3 = options3 || defBbOpts; var opts = filledBbOpts(options3); var eles = this; var cy = eles.cy(); var styleEnabled2 = cy.styleEnabled(); if (styleEnabled2) { for (var i2 = 0; i2 < eles.length; i2++) { var ele = eles[i2]; var _p = ele._private; var currPosKey = getBoundingBoxPosKey(ele); var isPosKeySame = _p.bbCachePosKey === currPosKey; var useCache = opts.useCache && isPosKeySame && !_p.styleDirty; ele.recalculateRenderedStyle(useCache); } } this.updateCompoundBounds(!options3.useCache); for (var _i = 0; _i < eles.length; _i++) { var _ele = eles[_i]; 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 nodes7 = this.nodes(); var cy = this.cy(); var hasCompoundNodes2 = cy.hasCompoundNodes(); var parents3 = cy.collection(); if (hasCompoundNodes2) { parents3 = nodes7.filter(function(node2) { return node2.isParent(); }); nodes7 = nodes7.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(); nodes7.forEach(storeOldPos).silentPositions(fn3); if (hasCompoundNodes2) { parents3.dirtyCompoundBoundsCache(); parents3.dirtyBoundingBoxCache(); parents3.updateCompoundBounds(true); } var bb = copyBoundingBox(this.boundingBox({ useCache: false })); nodes7.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; bounds3 = 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 d2 = ele.pstyle(opts.name); switch (d2.strValue) { case "label": ele.recalculateRenderedStyle(); return _p.rstyle[opts.labelName] || 0; default: return d2.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 border = ele.pstyle("border-width").pfValue; var padding2 = 2 * ele.padding(); return dim + border + padding2; } else { return 1; } } }, "outerDimImpl"); fn$2["rendered" + opts.uppercaseName] = /* @__PURE__ */ __name(function renderedDimImpl() { var ele = this[0]; if (ele) { var d2 = ele[opts.name](); return d2 * 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, getValue3) { if (ele.isEdge()) { return getValue3(ele); } }, "ifEdge"); ifEdgeRenderedPosition = /* @__PURE__ */ __name(function ifEdgeRenderedPosition2(ele, getPoint) { if (ele.isEdge()) { var cy = ele.cy(); return modelToRenderedPosition(getPoint(ele), cy.zoom(), cy.pan()); } }, "ifEdgeRenderedPosition"); ifEdgeRenderedPositions = /* @__PURE__ */ __name(function ifEdgeRenderedPositions2(ele, getPoints) { if (ele.isEdge()) { var cy = ele.cy(); var pan2 = cy.pan(); var zoom2 = cy.zoom(); return getPoints(ele).map(function(p3) { return modelToRenderedPosition(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, bounds3, 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, q2) { return q1 === q2; }, "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(Emitter2, "Emitter"); p2 = Emitter2.prototype; forEachEvent = /* @__PURE__ */ __name(function forEachEvent2(self2, handler, events, qualifier, callback, conf7, confOverrides) { if (fn$6(qualifier)) { callback = qualifier; qualifier = null; } if (confOverrides) { if (conf7 == null) { conf7 = confOverrides; } else { conf7 = extend4({}, conf7, 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 match2 = evt.match(eventRegex); if (match2) { var type3 = match2[1]; var namespace = match2[2] ? match2[2] : null; var ret = handler(self2, evt, type3, namespace, qualifier, callback, conf7); 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 match2 = evt.match(eventRegex); if (match2) { var type3 = match2[1]; var namespace = match2[2] ? match2[2] : null; var eventObj = makeEventObj(self2, { type: type3, namespace, target: self2.context }); handler(self2, eventObj); } } }, "forEachEventObj"); p2.on = p2.addListener = function(events, qualifier, callback, conf7, confOverrides) { forEachEvent(this, function(self2, event3, type3, namespace, qualifier2, callback2, conf8) { 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: conf8 // additional configuration }); } }, events, qualifier, callback, conf7, confOverrides); return this; }; p2.one = function(events, qualifier, callback, conf7) { return this.on(events, qualifier, callback, conf7, { one: true }); }; p2.removeListener = p2.off = function(events, qualifier, callback, conf7) { var _this = this; if (this.emitting !== 0) { this.listeners = copyArray$1(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, conf7); }, "_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(i3) { var listener = listeners[i3]; 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(l2) { return l2 !== 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(i2); } 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 Emitter2(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 nodes3(selector) { return this.filter(function(ele) { return ele.isNode(); }).filter(selector); }, "nodes"), edges: /* @__PURE__ */ __name(function edges3(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 nodes7 = this.spawn(); var edges5 = this.spawn(); for (var i2 = 0; i2 < this.length; i2++) { var ele = this[i2]; if (ele.isNode()) { nodes7.push(ele); } else { edges5.push(ele); } } return { nodes: nodes7, edges: edges5 }; }, "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 elements4 = this.spawn(); for (var i2 = 0; i2 < this.length; i2++) { var element3 = this[i2]; var remove3 = toRemove.has(element3); if (!remove3) { elements4.push(element3); } } return elements4; } }, "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 elements4 = 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)) { elements4.push(ele); } } return elements4; }, "intersect"), xor: /* @__PURE__ */ __name(function xor(other) { var cy = this._private.cy; if (string(other)) { other = cy.$(other); } var elements4 = 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 id28 = ele._private.data.id; var inOther = other2.hasElementWithId(id28); if (!inOther) { elements4.push(ele); } } }, "add"); add3(col1, col2); add3(col2, col1); return elements4; }, "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 id28 = ele._private.data.id; var inOther = other2.hasElementWithId(id28); 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 elements4 = this.spawnSelf(); for (var i2 = 0; i2 < toAdd.length; i2++) { var ele = toAdd[i2]; var add3 = !this.has(ele); if (add3) { elements4.push(ele); } } return elements4; }, "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 map5 = _p.map; for (var i2 = 0; i2 < toAdd.length; i2++) { var toAddEle = toAdd[i2]; var id28 = toAddEle._private.data.id; var add3 = !map5.has(id28); if (add3) { var index = this.length++; this[index] = toAddEle; map5.set(id28, { ele: toAddEle, index }); } } return this; }, "merge"), unmergeAt: /* @__PURE__ */ __name(function unmergeAt(i2) { var ele = this[i2]; var id28 = ele.id(); var _p = this._private; var map5 = _p.map; this[i2] = void 0; map5["delete"](id28); 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; map5.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 id28 = ele._private.data.id; var map5 = _p.map; var entry = map5.get(id28); 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 min9 = 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 < min9) { min9 = val; minEle = ele; } } return { value: min9, 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, b2) { 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(b2); 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(b2); if (eleDiff !== 0) { return eleDiff; } var zDiff = a2.pstyle("z-index").value - b2.pstyle("z-index").value; if (zDiff !== 0) { return zDiff; } return a2.poolIndex() - b2.poolIndex(); }, "zIndexSort"); elesfn$6 = { forEach: /* @__PURE__ */ __name(function forEach2(fn3, thisArg) { if (fn$6(fn3)) { var N2 = this.length; for (var i2 = 0; i2 < N2; 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 size3() { return this.length; }, "size"), eq: /* @__PURE__ */ __name(function eq3(i2) { return this[i2] || this.spawn(); }, "eq"), first: /* @__PURE__ */ __name(function first2() { 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(options3) { options3 = getLayoutDimensionOptions(options3); var dims; if (!this.takesUpSpace()) { dims = { w: 0, h: 0 }; } else if (options3.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(layout6, options3, fn3) { var nodes7 = this.nodes().filter(function(n2) { return !n2.isParent(); }); var cy = this.cy(); var layoutEles = options3.eles; var getMemoizeKey = /* @__PURE__ */ __name(function getMemoizeKey2(node3) { return node3.id(); }, "getMemoizeKey"); var fnMem = memoize$1(fn3, getMemoizeKey); layout6.emit({ type: "layoutstart", layout: layout6 }); layout6.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 = options3.spacingFactor && options3.spacingFactor !== 1; var spacingBb = /* @__PURE__ */ __name(function spacingBb2() { if (!useSpacingFactor) { return null; } var bb2 = makeBoundingBox(); for (var i3 = 0; i3 < nodes7.length; i3++) { var node3 = nodes7[i3]; var pos = fnMem(node3, i3); expandBoundingBoxByPoint(bb2, pos.x, pos.y); } return bb2; }, "spacingBb"); var bb = spacingBb(); var getFinalPos = memoize$1(function(node3, i3) { var newPos2 = fnMem(node3, i3); if (useSpacingFactor) { var spacing2 = Math.abs(options3.spacingFactor); newPos2 = calculateSpacing(spacing2, bb, newPos2); } if (options3.transform != null) { newPos2 = options3.transform(node3, newPos2); } return newPos2; }, getMemoizeKey); if (options3.animate) { for (var i2 = 0; i2 < nodes7.length; i2++) { var node2 = nodes7[i2]; var newPos = getFinalPos(node2, i2); var animateNode = options3.animateFilter == null || options3.animateFilter(node2, i2); if (animateNode) { var ani = node2.animation({ position: newPos, duration: options3.animationDuration, easing: options3.animationEasing }); layout6.animations.push(ani); } else { node2.position(newPos); } } if (options3.fit) { var fitAni = cy.animation({ fit: { boundingBox: layoutEles.boundingBoxAt(getFinalPos), padding: options3.padding }, duration: options3.animationDuration, easing: options3.animationEasing }); layout6.animations.push(fitAni); } else if (options3.zoom !== void 0 && options3.pan !== void 0) { var zoomPanAni = cy.animation({ zoom: options3.zoom, pan: options3.pan, duration: options3.animationDuration, easing: options3.animationEasing }); layout6.animations.push(zoomPanAni); } layout6.animations.forEach(function(ani2) { return ani2.play(); }); layout6.one("layoutready", options3.ready); layout6.emit({ type: "layoutready", layout: layout6 }); Promise$1.all(layout6.animations.map(function(ani2) { return ani2.promise(); })).then(function() { layout6.one("layoutstop", options3.stop); layout6.emit({ type: "layoutstop", layout: layout6 }); }); } else { nodes7.positions(getFinalPos); if (options3.fit) { cy.fit(options3.eles, options3.padding); } if (options3.zoom != null) { cy.zoom(options3.zoom); } if (options3.pan) { cy.pan(options3.pan); } layout6.one("layoutready", options3.ready); layout6.emit({ type: "layoutready", layout: layout6 }); layout6.one("layoutstop", options3.stop); layout6.emit({ type: "layoutstop", layout: layout6 }); } return this; }, "layoutPositions"), layout: /* @__PURE__ */ __name(function layout2(options3) { var cy = this.cy(); return cy.makeLayout(extend4({}, options3, { 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 renderer8 = cy.renderer(); var styleEnabled2 = cy.styleEnabled(); if (renderer8 && styleEnabled2) { renderer8.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(property2) { 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) { this.cleanStyle(); var overriddenStyle = ele._private.style[property2]; if (overriddenStyle != null) { return overriddenStyle; } else if (includeNonDefault) { return cy.style().getDefaultProperty(property2); } else { return null; } } }, "parsedStyle"), numericStyle: /* @__PURE__ */ __name(function numericStyle(property2) { var ele = this[0]; if (!ele.cy().styleEnabled()) { return; } if (ele) { var pstyle = ele.pstyle(property2); return pstyle.pfValue !== void 0 ? pstyle.pfValue : pstyle.value; } }, "numericStyle"), numericStyleUnits: /* @__PURE__ */ __name(function numericStyleUnits(property2) { var ele = this[0]; if (!ele.cy().styleEnabled()) { return; } if (ele) { return ele.pstyle(property2).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(property2) { var cy = this.cy(); if (!cy.styleEnabled()) { return this; } var ele = this[0]; if (ele) { return cy.style().getRenderedStyle(ele, property2); } }, "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 edges5 = ele.connectedEdges(); for (var j2 = 0; j2 < edges5.length; j2++) { var edge = edges5[j2]; 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 edges5 = ele.connectedEdges(); for (var j2 = 0; j2 < edges5.length; j2++) { var edge = edges5[j2]; 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({ incoming: true }) }); extend4(elesfn$2, { neighborhood: cache(function(selector) { var elements4 = []; var nodes7 = this.nodes(); for (var i2 = 0; i2 < nodes7.length; i2++) { var node2 = nodes7[i2]; var connectedEdges = node2.connectedEdges(); for (var j2 = 0; j2 < connectedEdges.length; j2++) { var edge = connectedEdges[j2]; var src = edge.source(); var tgt = edge.target(); var otherNode = node2 === src ? tgt : src; if (otherNode.length > 0) { elements4.push(otherNode[0]); } elements4.push(edge[0]); } } return this.spawn(elements4, 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 edges5 = node2._private.edges; for (var j2 = 0; j2 < edges5.length; j2++) { var edge = edges5[j2]; 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, elements4) { 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 map5 = new Map$2(); var createdElements = false; if (!elements4) { elements4 = []; } else if (elements4.length > 0 && plainObject(elements4[0]) && !element(elements4[0])) { createdElements = true; var eles = []; var elesIds = new Set$1(); for (var i2 = 0, l2 = elements4.length; i2 < l2; i2++) { var json3 = elements4[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); } elements4 = eles; } this.length = 0; for (var _i = 0, _l = elements4.length; _i < _l; _i++) { var element$1 = elements4[_i][0]; if (element$1 == null) { continue; } var id28 = element$1._private.data.id; if (!unique || !map5.has(id28)) { if (unique) { map5.set(id28, { 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(m2) { this.lazyMap = m2; }, rebuildMap: /* @__PURE__ */ __name(function rebuildMap() { var m2 = this.lazyMap = new Map$2(); var eles2 = this.eles; for (var _i2 = 0; _i2 < eles2.length; _i2++) { var _ele = eles2[_i2]; m2.set(_ele.id(), { index: _i2, ele: _ele }); } }, "rebuildMap") }; if (unique) { this._private.map = map5; } 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(id28) { id28 = "" + id28; return this._private.map.has(id28); }; elesfn$1.getElementById = function(id28) { id28 = "" + id28; var cy = this._private.cy; var entry = this._private.map.get(id28); 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 id28 = this[0]._private.data.id; return eles._private.map.get(id28).index; }; elesfn$1.indexOf = function(ele) { var id28 = ele[0]._private.data.id; return this._private.map.get(id28).index; }; elesfn$1.indexOfId = function(id28) { id28 = "" + id28; return this._private.map.get(id28).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 clone5 = new Element(cy, json3, false); elesArr.push(clone5); } 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 nodes7 = []; var edges5 = []; var elements4; for (var _i3 = 0, l2 = self2.length; _i3 < l2; _i3++) { var ele = self2[_i3]; if (addToPool2 && !ele.removed()) { continue; } if (ele.isNode()) { nodes7.push(ele); } else { edges5.push(ele); } } elements4 = nodes7.concat(edges5); var i2; var removeFromElements = /* @__PURE__ */ __name(function removeFromElements2() { elements4.splice(i2, 1); i2--; }, "removeFromElements"); for (i2 = 0; i2 < elements4.length; i2++) { var _ele2 = elements4[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 id28 = _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 j2 = 0; j2 < fieldsLength; j2++) { var field = fields[j2]; var val = _data3[field]; if (number$1(val)) { val = _data3[field] = "" + _data3[field]; } if (val == null || val === "") { error("Can not create edge `" + id28 + "` with unspecified " + field); badSourceOrTarget = true; } else if (!cy.hasElementWithId(val)) { error("Can not create edge `" + id28 + "` with nonexistant " + 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$2(); _private.map.set(id28, { ele: _ele2, index: 0 }); _private.removed = false; if (addToPool2) { cy.addToPool(_ele2); } } for (var _i4 = 0; _i4 < nodes7.length; _i4++) { var node2 = nodes7[_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 (elements4.length > 0) { var restored = elements4.length === self2.length ? self2 : new Collection(cy, elements4); 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 edges5 = node2._private.edges; for (var i3 = 0; i3 < edges5.length; i3++) { add3(edges5[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, l2 = self2.length; i2 < l2; 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 j2 = 0; j2 < pllEdges.length; j2++) { var pllEdge = pllEdges[j2]; 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(id28) { return id28 == null ? id28 : "" + id28; }, "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 elements4; var cy = this; if (elementOrCollection(opts)) { var eles = opts; if (eles._private.cy === cy) { elements4 = eles.restore(); } else { var jsons = []; for (var i2 = 0; i2 < eles.length; i2++) { var ele = eles[i2]; jsons.push(ele.json()); } elements4 = new Collection(cy, jsons); } } else if (array2(opts)) { var _jsons = opts; elements4 = 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 j2 = 0, jl = elesArray.length; j2 < jl; j2++) { var json3 = extend4({ group: group2 }, elesArray[j2]); _jsons2.push(json3); } } } elements4 = new Collection(cy, _jsons2); } else { var _json = opts; elements4 = new Element(cy, _json).collection(); } return elements4; }, "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(state5) { return -state5.tension * state5.x - state5.friction * state5.v; } __name(springAccelerationForState, "springAccelerationForState"); function springEvaluateStateWithDerivative(initialState, dt, derivative) { var state5 = { x: initialState.x + derivative.dx * dt, v: initialState.v + derivative.dv * dt, tension: initialState.tension, friction: initialState.friction }; return { dx: state5.v, dv: springAccelerationForState(state5) }; } __name(springEvaluateStateWithDerivative, "springEvaluateStateWithDerivative"); function springIntegrateState(state5, dt) { var a2 = { dx: state5.v, dv: springAccelerationForState(state5) }, b2 = springEvaluateStateWithDerivative(state5, dt * 0.5, a2), c3 = springEvaluateStateWithDerivative(state5, dt * 0.5, b2), d2 = springEvaluateStateWithDerivative(state5, dt, c3), dxdt = 1 / 6 * (a2.dx + 2 * (b2.dx + c3.dx) + d2.dx), dvdt = 1 / 6 * (a2.dv + 2 * (b2.dv + c3.dv) + d2.dv); state5.x = state5.x + dxdt * dt; state5.v = state5.v + dvdt * dt; return state5; } __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(now4) { stepAll(now4, cy); headlessStep(); }, "animationStep")); } __name(headlessStep, "headlessStep"); var renderer8 = cy.renderer(); if (renderer8 && renderer8.beforeRender) { renderer8.beforeRender(/* @__PURE__ */ __name(function rendererAnimationStep(willDraw, now4) { stepAll(now4, cy); }, "rendererAnimationStep"), renderer8.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 Emitter2(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(options3) { var renderer8 = this._private.renderer; options3 = options3 || {}; return renderer8.png(options3); }, "png"), jpg: /* @__PURE__ */ __name(function jpg(options3) { var renderer8 = this._private.renderer; options3 = options3 || {}; options3.bg = options3.bg || "#fff"; return renderer8.jpg(options3); }, "jpg") }; corefn$7.jpeg = corefn$7.jpg; corefn$6 = { layout: /* @__PURE__ */ __name(function layout3(options3) { var cy = this; if (options3 == null) { error("Layout options must be specified to make a layout"); return; } if (options3.name == null) { error("A `name` must be specified to make a layout"); return; } var name = options3.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(options3.eles)) { eles = cy.$(options3.eles); } else { eles = options3.eles != null ? options3.eles : cy.$(); } var layout6 = new Layout2(extend4({}, options3, { cy, eles })); return layout6; }, "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 renderer8 = this.renderer(); if (this.destroyed() || !renderer8) { return; } renderer8.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 renderer8 = this.renderer(); Object.keys(_p.batchNotifications).forEach(function(eventName) { var eles = _p.batchNotifications[eventName]; if (eles.empty()) { renderer8.notify(eventName); } else { renderer8.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(map5) { var cy = this; return this.batch(function() { var ids = Object.keys(map5); for (var i2 = 0; i2 < ids.length; i2++) { var id28 = ids[i2]; var data5 = map5[id28]; var ele = cy.getElementById(id28); ele.data(data5); } }); }, "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 }); 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 renderer4() { 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(options3) { var cy = this; var RendererProto = cy.extension("renderer", options3.name); if (RendererProto == null) { error("Can not initialise: No such renderer `".concat(options3.name, "` found. Did you forget to import it and `cytoscape.use()` it?")); return; } if (options3.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(options3); 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 nodes4(selector) { var nodes7 = this.$(function(ele) { return ele.isNode(); }); if (selector) { return nodes7.filter(selector); } return nodes7; }, "nodes"), edges: /* @__PURE__ */ __name(function edges4(selector) { var edges5 = this.$(function(ele) { return ele.isEdge(); }); if (selector) { return edges5.filter(selector); } return edges5; }, "edges"), // search the graph like jQuery $: /* @__PURE__ */ __name(function $2(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 ie = 0; ie < eles.length; ie++) { var ele = eles[ie]; 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 j2 = 0; j2 < props.length; j2++) { var prop = props[j2]; 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 j2 = 0; j2 < cxt.properties.length; j2++) { var prop = cxt.properties[j2]; 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 j2 = 0; j2 < strVal.length; j2++) { var ch = strVal.charCodeAt(j2); updateGrKey1(ch, grKey2); updateGrKey2(ch, grKey2); } }, "updateGrKeyWStr"); var N2 = 2e9; var cleanNum = /* @__PURE__ */ __name(function cleanNum2(val) { return -128 < val && val < 128 && Math.floor(val) !== val ? N2 - (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; var nodeKeys = [nodeBody, nodeBorder, nodeOutline, backgroundImage, compound, pie2].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; } 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; }; 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) { 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 b2 = 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 + (b2 - 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; } 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; 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 j2 = 0; j2 < propNames.length; j2++) { var propName = propNames[j2]; 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(resolve3) { if (delay2 > 0) { ele.delayAnimation(delay2).play().promise().then(resolve3); } else { resolve3(); } }).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 (triggerCheck != null && triggerCheck(fromValue, toValue)) { 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(); if ( // only for beziers -- so performance of other edges isn't affected prop.triggersBoundsOfParallelBeziers && name === "curve-style" && (fromValue === "bezier" || toValue === "bezier") ) { ele.parallelEdges().forEach(function(pllEdge) { if (pllEdge.isBundledBezier()) { pllEdge.dirtyBoundingBoxCache(); } }); } if (prop.triggersBoundsOfConnectedEdges && name === "display" && (fromValue === "none" || toValue === "none")) { ele.connectedEdges().forEach(function(edge) { edge.dirtyBoundingBoxCache(); }); } }); }; styfn$8.checkTriggers = function(ele, name, fromValue, toValue) { ele.dirtyStyleCache(); this.checkZOrderTrigger(ele, name, fromValue, toValue); this.checkBoundsTrigger(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 j2 = 0; j2 < props.length; j2++) { var _prop = props[j2]; 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 j2 = 0; j2 < eles.length; j2++) { var ele = eles[j2]; 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, property2, subproperty, index) { var pstyle = ele.pstyle(property2)[subproperty][index]; return pstyle != null ? pstyle : ele.cy().style().getDefaultProperty(property2)[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, j2; 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 (j2 = 0; j2 < strVal.length; j2++) { chVal = strVal.charCodeAt(j2); 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 j2 = 0; j2 < names.length; j2++) { var name = names[j2]; 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 j2 = 0; j2 < props.length; j2++) { var prop = props[j2]; 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 data5 = /* @__PURE__ */ __name(function data6(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"] }, 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 }, 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"] }, 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: data5("data") }, layoutData: { mapping: true, regex: data5("layoutData") }, scratch: { mapping: true, regex: data5("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 validate2(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 validate2(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 }]; var behavior = [{ name: "events", type: t4.bool, triggersZOrder: diff2.any }, { name: "text-events", type: t4.bool, triggersZOrder: diff2.any }]; var visibility = [{ name: "display", type: t4.display, triggersZOrder: diff2.any, triggersBounds: diff2.any, triggersBoundsOfConnectedEdges: true }, { 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, triggersBoundsOfParallelBeziers: true }, { 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 }); 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 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, 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, 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 _i = 0; _i < props.length; _i++) { var prop = props[_i]; props[prop.name] = prop; } for (var _i2 = 0; _i2 < aliases.length; _i2++) { var alias = aliases[_i2]; 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", "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", // 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%" }, [{ 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; }, {}), { // 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 property2 = self2.properties[name]; var passedValue = value2; var types = self2.types; if (!property2) { return null; } if (value2 === void 0) { return null; } if (property2.alias) { property2 = property2.pointsTo; name = property2.name; } var valueIsString = string(value2); if (valueIsString) { value2 = value2.trim(); } var type3 = property2.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 data5, mapData; if (!valueIsString || propIsFlat || value2.length < 7 || value2[1] !== "a") ; else if (value2.length >= 7 && value2[0] === "d" && (data5 = new RegExp(types.data.regex).exec(value2))) { if (propIsBypass) { return false; } var mapped = types.data; return { name, value: data5, strValue: "" + value2, mapped, field: data5[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 match2 = value2.match("^(" + number6 + ")(" + unitsRegex + ")?$"); if (match2) { value2 = match2[1]; units = match2[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 && !integer2(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 m2 = regex2.exec(value2); if (m2) { return { name, value: type3.singleRegexMatchValue ? m2[1] : m2, 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; } }; Style2 = /* @__PURE__ */ __name(function Style3(cy) { if (!(this instanceof Style3)) { return new Style3(cy); } if (!core2(cy)) { error("A style must have a core reference"); return; } this._private = { cy, coreStyle: {} }; this.length = 0; this.resetToDefault(); }, "Style"); styfn = Style2.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 map5 = args[0]; for (var i2 = 0; i2 < self2.properties.length; i2++) { var prop = self2.properties[i2]; var mapVal = map5[prop.name]; if (mapVal === void 0) { mapVal = map5[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 property2 = this.parse(name, value2); if (property2) { var i2 = this.length - 1; this[i2].properties.push(property2); this[i2].properties[property2.name] = property2; if (property2.name.match(/pie-(\d+)-background-size/) && property2.value) { this._private.hasPie = true; } if (property2.mapped) { this[i2].mappedProperties.push(property2); } var currentSelectorIsCore = !this[i2].selector; if (currentSelectorIsCore) { this._private.coreStyle[property2.name] = property2; } } 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; }; Style2.fromJson = function(cy, json3) { var style3 = new Style2(cy); style3.fromJson(json3); return style3; }; Style2.fromString = function(cy, string3) { return new Style2(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); }); Style2.types = styfn.types; Style2.properties = styfn.properties; Style2.propertyGroups = styfn.propertyGroups; Style2.propertyGroupNames = styfn.propertyGroupNames; Style2.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 setStyle2(style3) { var _p = this._private; if (stylesheet(style3)) { _p.style = style3.generateStyle(this); } else if (array2(style3)) { _p.style = Style2.fromJson(this, style3); } else if (string(style3)) { _p.style = Style2.fromString(this, style3); } else { _p.style = Style2(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, y5; 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; y5 = dims.y; if (number$1(x5)) { pan2.x = x5; } if (number$1(y5)) { pan2.y = y5; } 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, y5; if (!this._private.panningEnabled) { return this; } switch (args.length) { case 1: if (plainObject(arg0)) { dims = args[0]; x5 = dims.x; y5 = dims.y; if (number$1(x5)) { pan2.x += x5; } if (number$1(y5)) { pan2.y += y5; } 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"), fit: /* @__PURE__ */ __name(function fit(elements4, padding2) { var viewportState = this.getFitViewport(elements4, padding2); 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(elements4, padding2) { if (number$1(elements4) && padding2 === void 0) { padding2 = elements4; elements4 = void 0; } if (!this._private.panningEnabled || !this._private.zoomingEnabled) { return; } var bb; if (string(elements4)) { var sel = elements4; elements4 = this.$(sel); } else if (boundingBox(elements4)) { var bbe = elements4; 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(elements4)) { elements4 = this.mutableElements(); } if (elementOrCollection(elements4) && elements4.empty()) { return; } bb = bb || elements4.boundingBox(); var w3 = this.width(); var h2 = this.height(); var zoom2; padding2 = number$1(padding2) ? padding2 : 0; if (!isNaN(w3) && !isNaN(h2) && w3 > 0 && h2 > 0 && !isNaN(bb.w) && !isNaN(bb.h) && bb.w > 0 && bb.h > 0) { zoom2 = Math.min((w3 - 2 * padding2) / bb.w, (h2 - 2 * padding2) / 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: (w3 - zoom2 * (bb.x1 + bb.x2)) / 2, y: (h2 - zoom2 * (bb.y1 + bb.y2)) / 2 }; return { zoom: zoom2, pan: pan2 }; } return; }, "getFitViewport"), zoomRange: /* @__PURE__ */ __name(function zoomRange(min9, max10) { var _p = this._private; if (max10 == null) { var opts = min9; min9 = opts.min; max10 = opts.max; } if (number$1(min9) && number$1(max10) && min9 <= max10) { _p.minZoom = min9; _p.maxZoom = max10; } else if (number$1(min9) && max10 === void 0 && min9 <= _p.maxZoom) { _p.minZoom = min9; } else if (number$1(max10) && min9 === 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(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 z2 = opts.zoom; if (z2 < _p.minZoom || z2 > _p.maxZoom || !_p.zoomingEnabled) { zoomFailed = true; } else { _p.zoom = z2; 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(elements4) { var pan2 = this.getCenterPan(elements4); if (pan2) { this._private.pan = pan2; this.emit("pan viewport"); this.notify("viewport"); } return this; }, "center"), getCenterPan: /* @__PURE__ */ __name(function getCenterPan(elements4, zoom2) { if (!this._private.panningEnabled) { return; } if (string(elements4)) { var selector = elements4; elements4 = this.mutableElements().filter(selector); } else if (!elementOrCollection(elements4)) { elements4 = this.mutableElements(); } if (elements4.length === 0) { return; } var bb = elements4.boundingBox(); var w3 = this.width(); var h2 = this.height(); zoom2 = zoom2 === void 0 ? this._private.zoom : zoom2; var pan2 = { // middle x: (w3 - zoom2 * (bb.x1 + bb.x2)) / 2, y: (h2 - zoom2 * (bb.y1 + bb.y2)) / 2 }; return pan2; }, "getCenterPan"), reset: /* @__PURE__ */ __name(function reset3() { 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 size4() { 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 b2 = { x1: (rb.x1 - pan2.x) / zoom2, x2: (rb.x2 - pan2.x) / zoom2, y1: (rb.y1 - pan2.y) / zoom2, y2: (rb.y2 - pan2.y) / zoom2 }; b2.w = b2.x2 - b2.x1; b2.h = b2.y2 - b2.y1; return b2; }, "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 options3 = opts; options3.layout = extend4({ name: head2 ? "grid" : "null" }, options3.layout); options3.renderer = extend4({ name: head2 ? "canvas" : "null" }, options3.renderer); var defVal = /* @__PURE__ */ __name(function defVal2(def2, val, altVal) { if (val !== void 0) { return val; } else if (altVal !== void 0) { return altVal; } else { return def2; } }, "defVal"); var _p = this._private = { container: container2, // html dom ele container ready: false, // whether ready has been triggered options: options3, // cached options elements: new Collection(this), // elements in the graph listeners: [], // list of listeners aniEles: new Collection(this), // elements being animated data: options3.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, options3.zoomingEnabled), userZoomingEnabled: defVal(true, options3.userZoomingEnabled), panningEnabled: defVal(true, options3.panningEnabled), userPanningEnabled: defVal(true, options3.userPanningEnabled), boxSelectionEnabled: defVal(true, options3.boxSelectionEnabled), autolock: defVal(false, options3.autolock, options3.autolockNodes), autoungrabify: defVal(false, options3.autoungrabify, options3.autoungrabifyNodes), autounselectify: defVal(false, options3.autounselectify), styleEnabled: options3.styleEnabled === void 0 ? head2 : options3.styleEnabled, zoom: number$1(options3.zoom) ? options3.zoom : 1, pan: { x: plainObject(options3.pan) && number$1(options3.pan.x) ? options3.pan.x : 0, y: plainObject(options3.pan) && number$1(options3.pan.y) ? options3.pan.y : 0 }, animation: { // object for currently-running animations current: [], queue: [] }, hasCompoundNodes: false, multiClickDebounceTime: defVal(250, options3.multiClickDebounceTime) }; this.createEmitter(); this.selectionType(options3.selectionType); this.zoomRange({ min: options3.minZoom, max: options3.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({}, options3, options3.renderer); cy.initRenderer(rendererOptions); var setElesAndLayout = /* @__PURE__ */ __name(function setElesAndLayout2(elements4, onload, ondone) { cy.notifications(false); var oldEles = cy.mutableElements(); if (oldEles.length > 0) { oldEles.remove(); } if (elements4 != null) { if (plainObject(elements4) || array2(elements4)) { cy.add(elements4); } } 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([options3.style, options3.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(options3.ready)) { cy.on("ready", options3.ready); } for (var i2 = 0; i2 < readies.length; i2++) { var fn3 = readies[i2]; cy.on("ready", fn3); } if (reg) { reg.readies = []; } cy.emit("ready"); }, options3.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(id28) { return this._private.elements.hasElementWithId(id28); }, "hasElementWithId"), getElementById: /* @__PURE__ */ __name(function getElementById2(id28) { return this._private.elements.getElementById(id28); }, "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 options3 = _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({}, options3, options3.renderer, { // allow custom renderer name to be re-used, otherwise use canvas name: options3.renderer.name === "null" ? "canvas" : options3.renderer.name })); cy.startAnimationLoop(); cy.style(options3.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 options2() { 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 id28 = "" + json4.data.id; var ele = cy.getElementById(id28); idInJson[id28] = 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 elements4 = obj.elements[gr]; if (array2(elements4)) { updateEles(elements4, 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 f3 = fields[_i2]; if (obj[f3] != null) { cy[f3](obj[f3]); } } 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 options3 = _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(options3.renderer); json3.hideEdgesOnViewport = options3.hideEdgesOnViewport; json3.textureOnViewport = options3.textureOnViewport; json3.wheelSensitivity = options3.wheelSensitivity; json3.motionBlur = options3.motionBlur; json3.multiClickDebounceTime = options3.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) 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 params = this.options; var options3 = params; var cy = params.cy; var eles = options3.eles; var nodes7 = eles.nodes().filter(function(n3) { return !n3.isParent(); }); var graph = eles; var directed = options3.directed; var maximal = options3.acyclic || options3.maximal || options3.maximalAdjustments > 0; var bb = makeBoundingBox(options3.boundingBox ? options3.boundingBox : { x1: 0, y1: 0, w: cy.width(), h: cy.height() }); var roots; if (elementOrCollection(options3.roots)) { roots = options3.roots; } else if (array2(options3.roots)) { var rootsArray = []; for (var i2 = 0; i2 < options3.roots.length; i2++) { var id28 = options3.roots[i2]; var ele = cy.getElementById(id28); rootsArray.push(ele); } roots = cy.collection(rootsArray); } else if (string(options3.roots)) { roots = cy.$(options3.roots); } else { if (directed) { roots = nodes7.roots(); } else { var components3 = eles.components(); roots = cy.collection(); var _loop = /* @__PURE__ */ __name(function _loop2(_i3) { var comp = components3[_i3]; 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(_i); } } } var depths = []; var foundByBfs = {}; var addToDepth = /* @__PURE__ */ __name(function addToDepth2(ele2, d2) { if (depths[d2] == null) { depths[d2] = []; } var i3 = depths[d2].length; depths[d2].push(ele2); setInfo(ele2, { index: i3, depth: d2 }); }, "addToDepth"); var changeDepth = /* @__PURE__ */ __name(function changeDepth2(ele2, newDepth) { var _getInfo = getInfo(ele2), depth = _getInfo.depth, index = _getInfo.index; depths[depth][index] = null; addToDepth(ele2, newDepth); }, "changeDepth"); graph.bfs({ roots, directed: options3.directed, visit: /* @__PURE__ */ __name(function visit(node2, edge, pNode, i3, depth) { var ele2 = node2[0]; var id29 = ele2.id(); addToDepth(ele2, depth); foundByBfs[id29] = true; }, "visit") }); var orphanNodes = []; for (var _i2 = 0; _i2 < nodes7.length; _i2++) { var _ele = nodes7[_i2]; if (foundByBfs[_ele.id()]) { continue; } else { orphanNodes.push(_ele); } } var assignDepthsAt = /* @__PURE__ */ __name(function assignDepthsAt2(i3) { var eles2 = depths[i3]; for (var j2 = 0; j2 < eles2.length; j2++) { var _ele2 = eles2[j2]; if (_ele2 == null) { eles2.splice(j2, 1); j2--; continue; } setInfo(_ele2, { depth: i3, index: j2 }); } }, "assignDepthsAt"); var assignDepths = /* @__PURE__ */ __name(function assignDepths2() { for (var _i3 = 0; _i3 < depths.length; _i3++) { assignDepthsAt(_i3); } }, "assignDepths"); 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 id29 = 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 (!options3.acyclic && shifted2[id29]) { return null; } var newDepth = maxDepth + 1; changeDepth(ele2, newDepth); shifted2[id29] = newDepth; return true; } return false; }, "adjustMaximally"); if (directed && maximal) { var Q2 = []; var shifted = {}; var enqueue = /* @__PURE__ */ __name(function enqueue2(n3) { return Q2.push(n3); }, "enqueue"); var dequeue = /* @__PURE__ */ __name(function dequeue2() { return Q2.shift(); }, "dequeue"); nodes7.forEach(function(n3) { return Q2.push(n3); }); while (Q2.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; } } } assignDepths(); var minDistance = 0; if (options3.avoidOverlap) { for (var _i4 = 0; _i4 < nodes7.length; _i4++) { var n2 = nodes7[_i4]; var nbb = n2.layoutDimensions(options3); var w3 = nbb.w; var h2 = nbb.h; minDistance = Math.max(minDistance, w3, h2); } } 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 _i5 = 0; _i5 < neighbors.length; _i5++) { var neighbor = neighbors[_i5]; if (neighbor.isEdge() || neighbor.isParent() || !nodes7.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, b2) { var apct = getWeightedPercent(a2); var bpct = getWeightedPercent(b2); var diff2 = apct - bpct; if (diff2 === 0) { return ascending3(a2.id(), b2.id()); } else { return diff2; } }, "sortFn"); if (options3.depthSort !== void 0) { sortFn = options3.depthSort; } for (var _i6 = 0; _i6 < depths.length; _i6++) { depths[_i6].sort(sortFn); assignDepthsAt(_i6); } var orphanDepth = []; for (var _i7 = 0; _i7 < orphanNodes.length; _i7++) { orphanDepth.push(orphanNodes[_i7]); } depths.unshift(orphanDepth); assignDepths(); var biggestDepthSize = 0; for (var _i8 = 0; _i8 < depths.length; _i8++) { biggestDepthSize = Math.max(depths[_i8].length, biggestDepthSize); } var center4 = { x: bb.x1 + bb.w / 2, y: bb.x1 + bb.h / 2 }; var maxDepthSize = depths.reduce(function(max10, eles2) { return Math.max(max10, eles2.length); }, 0); var getPosition = /* @__PURE__ */ __name(function getPosition2(ele2) { var _getInfo2 = getInfo(ele2), depth = _getInfo2.depth, index = _getInfo2.index; var depthSize = depths[depth].length; var distanceX = Math.max(bb.w / ((options3.grid ? maxDepthSize : depthSize) + 1), minDistance); var distanceY = Math.max(bb.h / (depths.length + 1), minDistance); var radiusStepSize = Math.min(bb.w / 2 / depths.length, bb.h / 2 / depths.length); radiusStepSize = Math.max(radiusStepSize, minDistance); if (!options3.circle) { var epos = { x: center4.x + (index + 1 - (depthSize + 1) / 2) * distanceX, y: (depth + 1) * distanceY }; return epos; } else { var radius2 = radiusStepSize * depth + radiusStepSize - (depths.length > 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) }; } }, "getPosition"); eles.nodes().layoutPositions(this, options3, 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 options3 = params; var cy = params.cy; var eles = options3.eles; var clockwise = options3.counterclockwise !== void 0 ? !options3.counterclockwise : options3.clockwise; var nodes7 = eles.nodes().not(":parent"); if (options3.sort) { nodes7 = nodes7.sort(options3.sort); } var bb = makeBoundingBox(options3.boundingBox ? options3.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 = options3.sweep === void 0 ? 2 * Math.PI - 2 * Math.PI / nodes7.length : options3.sweep; var dTheta = sweep / Math.max(1, nodes7.length - 1); var r2; var minDistance = 0; for (var i2 = 0; i2 < nodes7.length; i2++) { var n2 = nodes7[i2]; var nbb = n2.layoutDimensions(options3); var w3 = nbb.w; var h2 = nbb.h; minDistance = Math.max(minDistance, w3, h2); } if (number$1(options3.radius)) { r2 = options3.radius; } else if (nodes7.length <= 1) { r2 = 0; } else { r2 = Math.min(bb.h, bb.w) / 2 - minDistance; } if (nodes7.length > 1 && options3.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 = options3.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, options3, 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(nodes7) { return nodes7.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 options3 = params; var clockwise = options3.counterclockwise !== void 0 ? !options3.counterclockwise : options3.clockwise; var cy = params.cy; var eles = options3.eles; var nodes7 = eles.nodes().not(":parent"); var bb = makeBoundingBox(options3.boundingBox ? options3.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 < nodes7.length; i2++) { var node2 = nodes7[i2]; var value2 = void 0; value2 = options3.concentric(node2); nodeValues.push({ value: value2, node: node2 }); node2._private.scratch.concentric = value2; } nodes7.updateStyle(); for (var _i = 0; _i < nodes7.length; _i++) { var _node = nodes7[_i]; var nbb = _node.layoutDimensions(options3); maxNodeSize = Math.max(maxNodeSize, nbb.w, nbb.h); } nodeValues.sort(function(a2, b2) { return b2.value - a2.value; }); var levelWidth2 = options3.levelWidth(nodes7); 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 + options3.minNodeSpacing; if (!options3.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 = options3.sweep === void 0 ? 2 * Math.PI - 2 * Math.PI / level.length : options3.sweep; var dTheta = level.dTheta = sweep / Math.max(1, level.length - 1); if (level.length > 1 && options3.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 (options3.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 j2 = 0; j2 < _level3.length; j2++) { var _val = _level3[j2]; var theta = options3.startAngle + (clockwise ? 1 : -1) * _dTheta * j2; 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, options3, function(ele) { var id28 = ele.id(); return pos[id28]; }); 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 options3 = this.options; var cy = options3.cy; var layout6 = this; layout6.stopped = false; if (options3.animate === true || options3.animate === false) { layout6.emit({ type: "layoutstart", layout: layout6 }); } if (true === options3.debug) { DEBUG = true; } else { DEBUG = false; } var layoutInfo = createLayoutInfo(cy, layout6, options3); if (DEBUG) { printLayoutInfo(layoutInfo); } if (options3.randomize) { randomizePositions(layoutInfo); } var startTime = performanceNow(); var refresh = /* @__PURE__ */ __name(function refresh2() { refreshPositions(layoutInfo, cy, options3); if (true === options3.fit) { cy.fit(options3.padding); } }, "refresh"); var mainLoop = /* @__PURE__ */ __name(function mainLoop2(i3) { if (layout6.stopped || i3 >= options3.numIter) { return false; } step(layoutInfo, options3); layoutInfo.temperature = layoutInfo.temperature * options3.coolingFactor; if (layoutInfo.temperature < options3.minTemp) { return false; } return true; }, "mainLoop"); var done = /* @__PURE__ */ __name(function done2() { if (options3.animate === true || options3.animate === false) { refresh(); layout6.one("layoutstop", options3.stop); layout6.emit({ type: "layoutstop", layout: layout6 }); } else { var nodes7 = options3.eles.nodes(); var getScaledPos = getScaleInBoundsFn(layoutInfo, options3, nodes7); nodes7.layoutPositions(layout6, options3, getScaledPos); } }, "done"); var i2 = 0; var loopRet = true; if (options3.animate === true) { var frame2 = /* @__PURE__ */ __name(function frame3() { var f3 = 0; while (loopRet && f3 < options3.refresh) { loopRet = mainLoop(i2); i2++; f3++; } if (!loopRet) { separateComponents(layoutInfo, options3); done(); } else { var now4 = performanceNow(); if (now4 - startTime >= options3.animationThreshold) { refresh(); } requestAnimationFrame2(frame3); } }, "frame"); frame2(); } else { while (loopRet) { loopRet = mainLoop(i2); i2++; } separateComponents(layoutInfo, options3); 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, layout6, options3) { var edges5 = options3.eles.edges(); var nodes7 = options3.eles.nodes(); var bb = makeBoundingBox(options3.boundingBox ? options3.boundingBox : { x1: 0, y1: 0, w: cy.width(), h: cy.height() }); var layoutInfo = { isCompound: cy.hasCompoundNodes(), layoutNodes: [], idToIndex: {}, nodeSize: nodes7.size(), graphSet: [], indexToGraph: [], layoutEdges: [], edgeSize: edges5.size(), temperature: options3.initialTemp, clientWidth: bb.w, clientHeight: bb.h, boundingBox: bb }; var components3 = options3.eles.components(); var id2cmptId = {}; for (var i2 = 0; i2 < components3.length; i2++) { var component2 = components3[i2]; for (var j2 = 0; j2 < component2.length; j2++) { var node2 = component2[j2]; id2cmptId[node2.id()] = i2; } } for (var i2 = 0; i2 < layoutInfo.nodeSize; i2++) { var n2 = nodes7[i2]; var nbb = n2.layoutDimensions(options3); 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(options3.nodeRepulsion) ? options3.nodeRepulsion(n2) : options3.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 j2 = 0; j2 < graph.length; j2++) { var index = layoutInfo.idToIndex[graph[j2]]; layoutInfo.indexToGraph[index] = i2; } } for (var i2 = 0; i2 < layoutInfo.edgeSize; i2++) { var e3 = edges5[i2]; var tempEdge = {}; tempEdge.id = e3.data("id"); tempEdge.sourceId = e3.data("source"); tempEdge.targetId = e3.data("target"); var idealLength = fn$6(options3.idealEdgeLength) ? options3.idealEdgeLength(e3) : options3.idealEdgeLength; var elasticity = fn$6(options3.edgeElasticity) ? options3.edgeElasticity(e3) : options3.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 * options3.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_aux2(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_aux2(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, options3, nodes7) { var bb = layoutInfo.boundingBox; var coseBB = { x1: Infinity, x2: -Infinity, y1: Infinity, y2: -Infinity }; if (options3.boundingBox) { nodes7.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 (options3.boundingBox) { var pctX = (lnode.positionX - coseBB.x1) / coseBB.w; var pctY = (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, options3) { var layout6 = options3.layout; var nodes7 = options3.eles.nodes(); var getScaledPos = getScaleInBoundsFn(layoutInfo, options3, nodes7); nodes7.positions(getScaledPos); if (true !== layoutInfo.ready) { layoutInfo.ready = true; layout6.one("layoutready", options3.ready); layout6.emit({ type: "layoutready", layout: this }); } }, "refreshPositions"); step = /* @__PURE__ */ __name(function step2(layoutInfo, options3, _step) { calculateNodeForces(layoutInfo, options3); calculateEdgeForces(layoutInfo); calculateGravityForces(layoutInfo, options3); propagateForces(layoutInfo); updatePositions(layoutInfo); }, "step"); calculateNodeForces = /* @__PURE__ */ __name(function calculateNodeForces2(layoutInfo, options3) { for (var i2 = 0; i2 < layoutInfo.graphSet.length; i2++) { var graph = layoutInfo.graphSet[i2]; var numNodes = graph.length; for (var j2 = 0; j2 < numNodes; j2++) { var node1 = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[j2]]]; for (var k2 = j2 + 1; k2 < numNodes; k2++) { var node2 = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[k2]]]; nodeRepulsion2(node1, node2, layoutInfo, options3); } } } }, "calculateNodeForces"); randomDistance = /* @__PURE__ */ __name(function randomDistance2(max10) { return -max10 + 2 * max10 * Math.random(); }, "randomDistance"); nodeRepulsion2 = /* @__PURE__ */ __name(function nodeRepulsion3(node1, node2, layoutInfo, options3) { 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 = options3.nodeOverlap * overlap; var distance2 = Math.sqrt(directionX * directionX + directionY * directionY); var forceX = force * directionX / distance2; var forceY = force * directionY / distance2; } 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 distance2 = Math.sqrt(distanceSqr); var force = (node1.nodeRepulsion + node2.nodeRepulsion) / distanceSqr; var forceX = force * distanceX / distance2; var forceY = force * distanceY / distance2; } 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 X3 = node2.positionX; var Y3 = node2.positionY; var H2 = node2.height || 1; var W2 = node2.width || 1; var dirSlope = dY / dX; var nodeSlope = H2 / W2; var res = {}; if (0 === dX && 0 < dY) { res.x = X3; res.y = Y3 + H2 / 2; return res; } if (0 === dX && 0 > dY) { res.x = X3; res.y = Y3 + H2 / 2; return res; } if (0 < dX && -1 * nodeSlope <= dirSlope && dirSlope <= nodeSlope) { res.x = X3 + W2 / 2; res.y = Y3 + W2 * dY / 2 / dX; return res; } if (0 > dX && -1 * nodeSlope <= dirSlope && dirSlope <= nodeSlope) { res.x = X3 - W2 / 2; res.y = Y3 - W2 * dY / 2 / dX; return res; } if (0 < dY && (dirSlope <= -1 * nodeSlope || dirSlope >= nodeSlope)) { res.x = X3 + H2 * dX / 2 / dY; res.y = Y3 + H2 / 2; return res; } if (0 > dY && (dirSlope <= -1 * nodeSlope || dirSlope >= nodeSlope)) { res.x = X3 - H2 * dX / 2 / dY; res.y = Y3 - H2 / 2; return res; } return res; }, "findClippingPoint"); calculateEdgeForces = /* @__PURE__ */ __name(function calculateEdgeForces2(layoutInfo, options3) { 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 l2 = Math.sqrt(lx * lx + ly * ly); var force = Math.pow(edge.idealLength - l2, 2) / edge.elasticity; if (0 !== l2) { var forceX = force * lx / l2; var forceY = force * ly / l2; } 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, options3) { if (options3.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 j2 = 0; j2 < numNodes; j2++) { var node2 = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[j2]]]; if (node2.isLocked) { continue; } var dx = centerX - node2.positionX; var dy = centerY - node2.positionY; var d2 = Math.sqrt(dx * dx + dy * dy); if (d2 > distThreshold) { var fx = options3.gravity * dx / d2; var fy = options3.gravity * dy / d2; node2.offsetX += fx; node2.offsetY += fy; } } } }, "calculateGravityForces"); propagateForces = /* @__PURE__ */ __name(function propagateForces2(layoutInfo, options3) { 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, options3) { 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 updateAncestryBoundaries2(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 updateAncestryBoundaries2(p3, layoutInfo); } return; }, "updateAncestryBoundaries"); separateComponents = /* @__PURE__ */ __name(function separateComponents2(layoutInfo, options3) { var nodes7 = layoutInfo.layoutNodes; var components3 = []; for (var i2 = 0; i2 < nodes7.length; i2++) { var node2 = nodes7[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 j2 = 0; j2 < c3.length; j2++) { var n2 = c3[j2]; 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 y5 = 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 j2 = 0; j2 < c3.length; j2++) { var n2 = c3[j2]; if (!n2.isLocked) { n2.positionX += x5 - c3.x1; n2.positionY += y5 - c3.y1; } } x5 += c3.w + options3.componentSpacing; usedW += c3.w + options3.componentSpacing; rowH = Math.max(rowH, c3.h); if (usedW > maxRowW) { y5 += rowH + options3.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 options3 = params; var cy = params.cy; var eles = options3.eles; var nodes7 = eles.nodes().not(":parent"); if (options3.sort) { nodes7 = nodes7.sort(options3.sort); } var bb = makeBoundingBox(options3.boundingBox ? options3.boundingBox : { x1: 0, y1: 0, w: cy.width(), h: cy.height() }); if (bb.h === 0 || bb.w === 0) { eles.nodes().layoutPositions(this, options3, function(ele) { return { x: bb.x1, y: bb.y1 }; }); } else { var cells = nodes7.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 min9 = Math.min(rows, cols); if (min9 == 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 = options3.rows; var oCols = options3.cols != null ? options3.cols : options3.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 (options3.condense) { cellWidth = 0; cellHeight = 0; } if (options3.avoidOverlap) { for (var i2 = 0; i2 < nodes7.length; i2++) { var node2 = nodes7[i2]; var pos = node2._private.position; if (pos.x == null || pos.y == null) { pos.x = 0; pos.y = 0; } var nbb = node2.layoutDimensions(options3); var p3 = options3.avoidOverlapPadding; var w3 = nbb.w + p3; var h2 = nbb.h + p3; cellWidth = Math.max(cellWidth, w3); cellHeight = Math.max(cellHeight, h2); } } var cellUsed = {}; var used = /* @__PURE__ */ __name(function used2(row2, col2) { return cellUsed["c-" + row2 + "-" + col2] ? true : false; }, "used"); var use2 = /* @__PURE__ */ __name(function use3(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 < nodes7.length; _i++) { var _node = nodes7[_i]; var rcPos = options3.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; use2(_pos.row, _pos.col); } } var getPos = /* @__PURE__ */ __name(function getPos2(element3, i3) { var x5, y5; if (element3.locked() || element3.isParent()) { return false; } var rcPos2 = id2manPos[element3.id()]; if (rcPos2) { x5 = rcPos2.col * cellWidth + cellWidth / 2 + bb.x1; y5 = rcPos2.row * cellHeight + cellHeight / 2 + bb.y1; } else { while (used(row, col)) { moveToNextCell(); } x5 = col * cellWidth + cellWidth / 2 + bb.x1; y5 = row * cellHeight + cellHeight / 2 + bb.y1; use2(row, col); moveToNextCell(); } return { x: x5, y: y5 }; }, "getPos"); nodes7.layoutPositions(this, options3, 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 options3 = this.options; var eles = options3.eles; var layout6 = this; options3.cy; layout6.emit("layoutstart"); eles.nodes().positions(function() { return { x: 0, y: 0 }; }); layout6.one("layoutready", options3.ready); layout6.emit("layoutready"); layout6.one("layoutstop", options3.stop); layout6.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 options3 = this.options; var eles = options3.eles; var nodes7 = eles.nodes(); var posIsFn = fn$6(options3.positions); function getPosition(node2) { if (options3.positions == null) { return copyPosition(node2.position()); } if (posIsFn) { return options3.positions(node2); } var pos = options3.positions[node2._private.data.id]; if (pos == null) { return null; } return pos; } __name(getPosition, "getPosition"); nodes7.layoutPositions(this, options3, 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 options3 = this.options; var cy = options3.cy; var eles = options3.eles; var bb = makeBoundingBox(options3.boundingBox ? options3.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, options3, 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"); noop4 = /* @__PURE__ */ __name(function noop5() { }, "noop"); throwImgErr = /* @__PURE__ */ __name(function throwImgErr2() { throw new Error("A headless instance can not render images"); }, "throwImgErr"); NullRenderer.prototype = { recalculateRenderedStyle: noop4, notify: /* @__PURE__ */ __name(function notify2() { this.notifications++; }, "notify"), init: noop4, 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 renderer8 = this; var bbCollide = /* @__PURE__ */ __name(function bbCollide2(x5, y5, size5, angle2, translation, edgeWidth, padding2) { var x1 = translation.x - size5 / 2 - padding2; var x22 = translation.x + size5 / 2 + padding2; var y1 = translation.y - size5 / 2 - padding2; var y22 = translation.y + size5 / 2 + padding2; var inside = x1 <= x5 && x5 <= x22 && y1 <= y5 && y5 <= y22; return inside; }, "bbCollide"); var transform8 = /* @__PURE__ */ __name(function transform9(x5, y5, size5, angle2, translation) { var xRotated = x5 * Math.cos(angle2) - y5 * Math.sin(angle2); var yRotated = x5 * Math.sin(angle2) + y5 * Math.cos(angle2); var xScaled = xRotated * size5; var yScaled = yRotated * size5; var xTranslated = xScaled + translation.x; var yTranslated = yScaled + translation.y; return { x: xTranslated, y: yTranslated }; }, "transform"); var transformPoints = /* @__PURE__ */ __name(function transformPoints2(pts2, size5, angle2, translation) { var retPts = []; for (var i2 = 0; i2 < pts2.length; i2 += 2) { var x5 = pts2[i2]; var y5 = pts2[i2 + 1]; retPts.push(transform8(x5, y5, size5, 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, y5, size5, angle2, translation, padding2) { var points = pointsToArr(transformPoints(this.points, size5 + 2 * padding2, angle2, translation)); var inside = pointInsidePolygonPoints(x5, y5, points); return inside; }, "collide"), roughCollide: bbCollide, draw: /* @__PURE__ */ __name(function draw24(context, size5, angle2, translation) { var points = transformPoints(this.points, size5, angle2, translation); renderer8.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 draw24(context, size5, angle2, translation, edgeWidth) { var ptsTrans = transformPoints(this.points, size5, angle2, translation); var ctrlPt = this.controlPoint; var ctrlPtTrans = transform8(ctrlPt[0], ctrlPt[1], size5, angle2, translation); renderer8.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, y5, size5, angle2, translation, edgeWidth, padding2) { var triPts = pointsToArr(transformPoints(this.points, size5 + 2 * padding2, angle2, translation)); var teePts = pointsToArr(transformPoints(this.pointsTee, size5 + 2 * padding2, angle2, translation)); var inside = pointInsidePolygonPoints(x5, y5, triPts) || pointInsidePolygonPoints(x5, y5, teePts); return inside; }, "collide"), draw: /* @__PURE__ */ __name(function draw24(context, size5, angle2, translation, edgeWidth) { var triPts = transformPoints(this.points, size5, angle2, translation); var teePts = transformPoints(this.pointsTee, size5, angle2, translation); renderer8.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, y5, size5, angle2, translation, edgeWidth, padding2) { var t4 = translation; var circleInside = Math.pow(t4.x - x5, 2) + Math.pow(t4.y - y5, 2) <= Math.pow((size5 + 2 * padding2) * this.radius, 2); var triPts = pointsToArr(transformPoints(this.points, size5 + 2 * padding2, angle2, translation)); return pointInsidePolygonPoints(x5, y5, triPts) || circleInside; }, "collide"), draw: /* @__PURE__ */ __name(function draw24(context, size5, angle2, translation, edgeWidth) { var triPts = transformPoints(this.pointsTr, size5, angle2, translation); renderer8.arrowShapeImpl(this.name)(context, triPts, translation.x, translation.y, this.radius * size5); }, "draw"), spacing: /* @__PURE__ */ __name(function spacing2(edge) { return renderer8.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(size5, edgeWidth) { var p3 = this.baseCrossLinePts.slice(); var shiftFactor = edgeWidth / size5; 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, y5, size5, angle2, translation, edgeWidth, padding2) { var triPts = pointsToArr(transformPoints(this.points, size5 + 2 * padding2, angle2, translation)); var teePts = pointsToArr(transformPoints(this.crossLinePts(size5, edgeWidth), size5 + 2 * padding2, angle2, translation)); var inside = pointInsidePolygonPoints(x5, y5, triPts) || pointInsidePolygonPoints(x5, y5, teePts); return inside; }, "collide"), draw: /* @__PURE__ */ __name(function draw24(context, size5, angle2, translation, edgeWidth) { var triPts = transformPoints(this.points, size5, angle2, translation); var crossLinePts = transformPoints(this.crossLinePts(size5, edgeWidth), size5, angle2, translation); renderer8.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, y5, size5, angle2, translation, edgeWidth, padding2) { var t4 = translation; var inside = Math.pow(t4.x - x5, 2) + Math.pow(t4.y - y5, 2) <= Math.pow((size5 + 2 * padding2) * this.radius, 2); return inside; }, "collide"), draw: /* @__PURE__ */ __name(function draw24(context, size5, angle2, translation, edgeWidth) { renderer8.arrowShapeImpl(this.name)(context, translation.x, translation.y, this.radius * size5); }, "draw"), spacing: /* @__PURE__ */ __name(function spacing2(edge) { return renderer8.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 scale = offsets[4]; var pan2 = cy.pan(); var zoom2 = cy.zoom(); var x5 = ((clientX - offsetLeft) / scale - pan2.x) / zoom2; var y5 = ((clientY - offsetTop) / scale - pan2.y) / zoom2; return [x5, y5]; }; 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 padding2 = { 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 = padding2.left + padding2.right; var paddingVer = padding2.top + padding2.bottom; var borderHor = border.left + border.right; var scale = rect3.width / (clientWidth + borderHor); var unscaledW = clientWidth - paddingHor; var unscaledH = clientHeight - paddingVer; var left3 = rect3.left + padding2.left + border.left; var top2 = rect3.top + padding2.top + border.top; return this.containerBB = [left3, top2, unscaledW, unscaledH, scale]; }; BRp$e.invalidateContainerClientCoordsCache = function() { this.containerBB = null; }; BRp$e.findNearestElement = function(x5, y5, interactiveElementsOnly, isTouch) { return this.findNearestElements(x5, y5, interactiveElementsOnly, isTouch)[0]; }; BRp$e.findNearestElements = function(x5, y5, 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 <= y5 && y5 <= pos.y + hh) { var shape = r2.nodeShapes[self2.getNodeShape(node2)]; if (shape.checkPoint(x5, y5, 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 scale = 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, y5, pts2[i3], pts2[i3 + 1], pts2[i3 + 2], pts2[i3 + 3], width22) && widthSq > (sqDist = sqdistToFiniteLine(x5, y5, 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, y5, pts2[i3], pts2[i3 + 1], pts2[i3 + 2], pts2[i3 + 3], pts2[i3 + 4], pts2[i3 + 5], width22) && widthSq > (sqDist = sqdistToQuadraticBezier(x5, y5, 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, scale); 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, y5, arSize, ar.angle, { x: ar.x, y: ar.y }, edgeWidth, edgeThreshold) && shape.collide(x5, y5, 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 text3 = ele2.pstyle(prefixDash + "label").value; var eventsEnabled = ele2.pstyle("text-events").strValue === "yes"; if (!eventsEnabled || !text3) { 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 rotate = /* @__PURE__ */ __name(function rotate2(x6, y6) { x6 = x6 - lx; y6 = y6 - ly; return { x: x6 * cos3 - y6 * sin3 + lx, y: x6 * sin3 + y6 * cos3 + ly }; }, "rotate"); var px1y1 = rotate(lx1, ly1); var px1y2 = rotate(lx1, ly2); var px2y1 = rotate(lx2, ly1); var px2y2 = rotate(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, y5, points)) { addEle(ele2); return true; } } else { if (inBoundingBox(bb, x5, y5)) { 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 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 }); for (var e3 = 0; e3 < eles.length; e3++) { var ele = eles[e3]; if (ele.isNode()) { var node2 = ele; var nodeBb = node2.boundingBox({ includeNodes: true, includeEdges: false, includeLabels: false }); if (boundingBoxesIntersect(boxBb, nodeBb) && !boundingBoxInBoundingBox(nodeBb, boxBb)) { box.push(node2); } } else { var edge = ele; var _p = edge._private; var rs = _p.rscratch; 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 === "haystack" || rs.edgeType === "straight") { box.push(edge); } } } 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 l2 = pts2.length; var bX = qbezierAt(pts2[l2 - 6], pts2[l2 - 4], pts2[l2 - 2], 0.9); var bY = qbezierAt(pts2[l2 - 5], pts2[l2 - 3], pts2[l2 - 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, scale) { var cache3 = this.arrowWidthCache = this.arrowWidthCache || {}; var cachedVal = cache3[edgeWidth + ", " + scale]; if (cachedVal) { return cachedVal; } cachedVal = Math.max(Math.pow(edgeWidth * 13.37, 0.9), 29) * scale; cache3[edgeWidth + ", " + scale] = cachedVal; return cachedVal; }; v1 = {}; v2 = {}; 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(v2, v1); asVec(currentPoint, nextPoint, v2); sinA = v1.nx * v2.ny - v1.ny * v2.nx; sinA90 = v1.nx * v2.nx - v1.ny * -v2.ny; angle = Math.asin(Math.max(-1, Math.min(1, sinA))); if (Math.abs(angle) < 1e-6) { x3 = currentPoint.x; y3 = 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, v2.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 + v2.nx * lenOut; stopY = currentPoint.y + v2.ny * lenOut; x3 = stopX - v2.ny * cRadius * radDirection; y3 = stopY + v2.nx * cRadius * radDirection; startX = currentPoint.x + v1.nx * lenOut; startY = currentPoint.y + v1.ny * lenOut; lastPoint = currentPoint; }, "calcCornerArc"); __name(drawPreparedRoundCorner, "drawPreparedRoundCorner"); __name(getRoundCorner, "getRoundCorner"); 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 l2 = Math.sqrt(dx * dx + dy * dy); return { x: -dy / l2, y: dx / l2 }; }, "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(edges5) { for (var i2 = 0; i2 < edges5.length; i2++) { var edge = edges5[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 w3 = segmentWs.pfValue[s2]; var d2 = segmentDs.pfValue[s2]; var w1 = 1 - w3; var w22 = w3; 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 * d2, adjustedMidpt.y + vectorNormInverse.y * d2); 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 j2 = i2; var loopDist = stepSize; if (edgeIsUnbundled) { j2 = 0; loopDist = ctrlptDist; } var loopAngle = loopDir - Math.PI / 2; var outAngle = loopAngle - loopSwp / 2; var inAngle = loopAngle + loopSwp / 2; var dc = String(loopDir + "_" + loopSwp); j2 = dirCounts[dc] === void 0 ? dirCounts[dc] = 0 : ++dirCounts[dc]; rs.ctrlpts = [srcPos.x + Math.cos(outAngle) * 1.4 * loopDist * (j2 / 3 + 1), srcPos.y + Math.sin(outAngle) * 1.4 * loopDist * (j2 / 3 + 1), srcPos.x + Math.cos(inAngle) * 1.4 * loopDist * (j2 / 3 + 1), srcPos.y + Math.sin(inAngle) * 1.4 * loopDist * (j2 / 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 j2 = i2; var loopDist = stepSize; if (edgeIsUnbundled) { j2 = 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 * 0.01)); var compoundStretchB = Math.max(minCompoundStretch, Math.log(tgtW * 0.01)); rs.ctrlpts = [loopPos.x, loopPos.y - (1 + Math.pow(loopW, 1.12) / 100) * loopDist * (j2 / 3 + 1) * compoundStretchA, loopPos.x - (1 + Math.pow(loopW, 1.12) / 100) * loopDist * (j2 / 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 b2 = 0; b2 < bezierN; b2++) { 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[b2] : stepSize; ctrlptWeight = ctrlptWs.value[b2]; } 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 l2 = 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; l2 = sgnL * Math.abs(l2); forcedDir = true; } var d2; if (turnIsPercent) { var p3 = taxiTurnPfVal < 0 ? 1 + taxiTurnPfVal : taxiTurnPfVal; d2 = p3 * l2; } else { var k2 = taxiTurnPfVal < 0 ? l2 : 0; d2 = k2 + taxiTurnPfVal * sgnL; } var getIsTooClose = /* @__PURE__ */ __name(function getIsTooClose2(d3) { return Math.abs(d3) < minD || Math.abs(d3) >= Math.abs(l2); }, "getIsTooClose"); var isTooCloseSrc = getIsTooClose(d2); var isTooCloseTgt = getIsTooClose(Math.abs(l2) - Math.abs(d2)); 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 y5 = (posPts.y1 + posPts.y2) / 2; var x1 = posPts.x1, x22 = posPts.x2; rs.segpts = [x1, y5, x22, y5]; } 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 + d2 + (dIncludesNodeBody ? srcH / 2 * sgnL : 0); var _x4 = posPts.x1, _x5 = posPts.x2; rs.segpts = [_x4, _y4, _x5, _y4]; } else { var _x6 = posPts.x1 + d2 + (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 b2 = 0; b2 + 1 < rs.ctrlpts.length; b2 += 2) { rs.allpts.push(rs.ctrlpts[b2], rs.ctrlpts[b2 + 1]); if (b2 + 3 < rs.ctrlpts.length) { rs.allpts.push((rs.ctrlpts[b2] + rs.ctrlpts[b2 + 2]) / 2, (rs.ctrlpts[b2 + 1] + rs.ctrlpts[b2 + 3]) / 2); } } rs.allpts.push(rs.endX, rs.endY); var m2, mt; if (rs.ctrlpts.length / 2 % 2 === 0) { m2 = rs.allpts.length / 2 - 1; rs.midX = rs.allpts[m2]; rs.midY = rs.allpts[m2 + 1]; } else { m2 = rs.allpts.length / 2 - 3; mt = 0.5; rs.midX = qbezierAt(rs.allpts[m2], rs.allpts[m2 + 2], rs.allpts[m2 + 4], mt); rs.midY = qbezierAt(rs.allpts[m2 + 1], rs.allpts[m2 + 3], rs.allpts[m2 + 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]; 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(edges5) { var _this = this; if (!edges5 || edges5.length === 0) { return; } var r2 = this; var cy = r2.cy; var hasCompounds = cy.hasCompoundNodes(); var hashTable = { map: new Map$2(), get: /* @__PURE__ */ __name(function get6(pairId2) { var map22 = this.map.get(pairId2[0]); if (map22 != null) { return map22.get(pairId2[1]); } else { return null; } }, "get"), set: /* @__PURE__ */ __name(function set6(pairId2, val) { var map22 = this.map.get(pairId2[0]); if (map22 == null) { map22 = new Map$2(); this.map.set(pairId2[0], map22); } map22.set(pairId2[1], val); }, "set") }; var pairIds = []; var haystackEdges = []; for (var i2 = 0; i2 < edges5.length; i2++) { var edge = edges5[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" || curveStyle.endsWith("segments") || curveStyle === "straight" || curveStyle === "straight-triangle" || curveStyle.endsWith("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 tableEntry = hashTable.get(pairId); if (tableEntry == null) { tableEntry = { eles: [] }; hashTable.set(pairId, tableEntry); pairIds.push(pairId); } tableEntry.eles.push(edge); if (edgeIsUnbundled) { tableEntry.hasUnbundled = true; } if (edgeIsBezier) { tableEntry.hasBezier = true; } } var _loop = /* @__PURE__ */ __name(function _loop2(p4) { var pairId2 = pairIds[p4]; var pairInfo = hashTable.get(pairId2); var swappedpairInfo = void 0; 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" || _curveStyle.endsWith("segments") || _curveStyle.endsWith("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 l2 = Math.sqrt(dx * dx + dy * dy); var vector = pairInfo.vector = { x: dx, y: dy }; var vectorNorm = pairInfo.vectorNorm = { x: vector.x / l2, y: vector.y / l2 }; var vectorNormInverse = { x: -vectorNorm.y, y: vectorNorm.x }; pairInfo.nodesOverlap = !number$1(l2) || 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, tgtPos: srcPos, 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(p3); } this.findHaystackPoints(haystackEdges); }; __name(getPts, "getPts"); BRp$c.getSegmentPoints = function(edge) { var rs = edge[0]._private.rscratch; var type3 = rs.edgeType; if (type3 === "segments") { this.recalculateRenderedStyle(edge); return getPts(rs.segpts); } }; BRp$c.getControlPoints = function(edge) { var rs = edge[0]._private.rscratch; var type3 = rs.edgeType; if (type3 === "bezier" || type3 === "multibezier" || type3 === "self" || type3 === "compound") { this.recalculateRenderedStyle(edge); 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 w3 = node2.outerWidth(); var h2 = 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] * w3; } if (prop.units[1] === "%") { p3[1] = p3[1] * h2; } p3[0] += npos.x; p3[1] += npos.y; return p3; } else { var angle2 = prop.pfValue[0]; angle2 = -Math.PI / 2 + angle2; var l2 = 2 * Math.max(w3, h2); var _p = [npos.x + Math.cos(angle2) * l2, npos.y + Math.sin(angle2) * l2]; return r2.nodeShapes[this.getNodeShape(node2)].intersectLine(npos.x, npos.y, w3, h2, _p[0], _p[1], 0, node2.pstyle("corner-radius").value === "auto" ? "auto" : node2.pstyle("corner-radius").pfValue, rs); } }; BRp$b.findEndpoints = function(edge) { 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 = 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; 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, tgtPos.y] : rs.segpts.slice(0, 2); var tgtArrowFromPt = !segments ? [srcPos.x, srcPos.y] : 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(edges5) { this.findEdgeControlPoints(edges5); }; 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 padding2 = 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 - padding2; break; case "right": textX = nodePos.x + nodeWidth / 2 + padding2; break; default: textX = nodePos.x; } switch (textValign) { case "top": textY = nodePos.y - nodeHeight / 2 - padding2; break; case "bottom": textY = nodePos.y + nodeHeight / 2 + padding2; 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 createControlPointInfo2() { if (createControlPointInfo2.cache) { return createControlPointInfo2.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 j2 = 0; j2 < nProjs - 1; j2++) { addSegment(cp, bpts[_i * nProjs + j2], bpts[_i * nProjs + j2 + 1], r2.bezierProjPcts[j2], r2.bezierProjPcts[j2 + 1]); } addSegment(cp, bpts[_i * nProjs + nProjs - 1], cp.p2, r2.bezierProjPcts[nProjs - 1], 1); } return createControlPointInfo2.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 j2 = 0; j2 < _cp.segments.length; j2++) { var _seg = _cp.segments[isSrc ? j2 : _cp.segments.length - 1 - j2]; var lastSeg = i2 === cps.length - 1 && j2 === _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 d2 = 0, di, d0; var p0, p1; var l2 = rs.allpts.length; for (var _i2 = 0; _i2 + 3 < l2; _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[l2 - 2 - _i2], y: rs.allpts[l2 - 1 - _i2] }; p1 = { x: rs.allpts[l2 - 4 - _i2], y: rs.allpts[l2 - 3 - _i2] }; } di = dist(p0, p1); d0 = d2; d2 += di; if (d2 >= 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 text3 = this.getLabelText(ele, prefix); var labelDims = this.calculateLabelDimensions(ele, text3); 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 text3 = 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 (!text3) { return ""; } if (textTransform == "none") ; else if (textTransform == "uppercase") { text3 = text3.toUpperCase(); } else if (textTransform == "lowercase") { text3 = text3.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 = text3.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 l2 = 0; l2 < lines.length; l2++) { var line2 = lines[l2]; 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); text3 = 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, text3).width < _maxW) { return text3; } for (var i2 = 0; i2 < text3.length; i2++) { var widthWithNextCh = this.calculateLabelDimensions(ele, ellipsized + text3[i2] + ellipsis).width; if (widthWithNextCh > _maxW) { break; } ellipsized += text3[i2]; if (i2 === text3.length - 1) { incLastCh = true; } } if (!incLastCh) { ellipsized += ellipsis; } return ellipsized; } return text3; }; 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, text3) { var r2 = this; var containerWindow = r2.cy.window(); var document2 = containerWindow.document; var cacheKey = hashString(text3, ele._private.labelDimsKey); var cache3 = r2.labelDimCache || (r2.labelDimCache = []); var existingVal = cache3[cacheKey]; if (existingVal != null) { return existingVal; } var padding2 = 0; var fStyle = ele.pstyle("font-style").strValue; var size5 = 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(size5, "px ").concat(family); var width3 = 0; var height2 = 0; var lines = text3.split("\n"); for (var i2 = 0; i2 < lines.length; i2++) { var line2 = lines[i2]; var metrics = c2d.measureText(line2); var w3 = Math.ceil(metrics.width); var h2 = size5; width3 = Math.max(w3, width3); height2 += h2; } width3 += padding2; height2 += padding2; return cache3[cacheKey] = { 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"); var edges5 = []; var nodes7 = []; 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 (useCache && rstyle.clean || ele.removed()) { continue; } if (ele.pstyle("display").value === "none") { continue; } if (_p.group === "nodes") { nodes7.push(ele); } else { edges5.push(ele); } rstyle.clean = true; } for (var _i2 = 0; _i2 < nodes7.length; _i2++) { var _ele = nodes7[_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(edges5); for (var _i3 = 0; _i3 < edges5.length; _i3++) { var _ele2 = edges5[_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; } }; BRp$3 = {}; BRp$3.registerBinding = function(target, event3, handler, useCapture) { var args = Array.prototype.slice.apply(arguments, [1]); var b2 = this.binder(target); return b2.on.apply(b2, 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 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 setGrabbed = /* @__PURE__ */ __name(function setGrabbed2(ele) { ele[0]._private.grabbed = true; }, "setGrabbed"); var setFreed = /* @__PURE__ */ __name(function setFreed2(ele) { ele[0]._private.grabbed = false; }, "setFreed"); 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 list2 = opts.addToList; var listHasEle = list2.has(ele); if (!listHasEle && ele.grabbable() && !ele.locked()) { list2.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(nodes7, opts) { opts = opts || {}; var hasCompoundNodes2 = nodes7.cy().hasCompoundNodes(); if (opts.inDragLayer) { nodes7.forEach(setInDragLayer); nodes7.neighborhood().stdFilter(function(ele) { return !hasCompoundNodes2 || ele.isEdge(); }).forEach(setInDragLayer); } if (opts.addToList) { nodes7.forEach(function(ele) { addToDragList(ele, opts); }); } addDescendantsToDrag(nodes7, opts); updateAncestorsInDragLayer(nodes7, { 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 nodes7 = parent4.descendants().spawnSelf().merge(parent4).unmerge(node2).unmerge(node2.descendants()); var edges5 = nodes7.connectedEdges(); if (opts.inDragLayer) { edges5.forEach(setInDragLayer); nodes7.forEach(setInDragLayer); } if (opts.addToList) { nodes7.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 j2 = 0; j2 < rNodes.length; j2++) { var rNode = rNodes[j2]; 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_1(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 y5 = 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 && y5 <= p3.clientY && p3.clientY <= y5 + 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 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({ originalEvent: e3, type: "taphold", position: { x: pos[0], y: pos[1] } }); } else { cy.emit({ originalEvent: e3, type: "taphold", position: { x: pos[0], y: pos[1] } }); } } }, 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 makeEvent = /* @__PURE__ */ __name(function makeEvent2(type3) { return { originalEvent: e3, type: type3, position: { x: pos[0], y: pos[1] } }; }, "makeEvent"); 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); r2.registerBinding(containerWindow, "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 last3 = 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 goIntoBoxMode = /* @__PURE__ */ __name(function goIntoBoxMode2() { r2.data.bgActivePosistion = void 0; if (!r2.hoverData.selecting) { cy.emit({ originalEvent: e3, type: "boxstart", position: { x: pos[0], y: pos[1] } }); } select[4] = 1; r2.hoverData.selecting = true; r2.redrawHint("select", true); r2.redraw(); }, "goIntoBoxMode"); if (r2.hoverData.which === 3) { if (isOverThresholdDrag) { var cxtEvt = { originalEvent: e3, type: "cxtdrag", position: { x: pos[0], y: pos[1] } }; 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({ originalEvent: e3, type: "cxtdragout", position: { x: pos[0], y: pos[1] } }); } r2.hoverData.cxtOver = near; if (near) { near.emit({ originalEvent: e3, type: "cxtdragover", position: { x: pos[0], y: pos[1] } }); } } } } 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("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 != last3) { if (last3) { triggerEvents(last3, ["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("freeon"); draggedElements.emit("free"); if (r2.dragData.didDrag) { down.emit("dragfreeon"); draggedElements.emit("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("position 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(); } if (r2.hoverData.which === 3) { var cxtEvt = { originalEvent: e3, type: "cxttapend", position: { x: pos[0], y: pos[1] } }; if (down) { down.emit(cxtEvt); } else { cy.emit(cxtEvt); } if (!r2.hoverData.cxtDragged) { var cxtTap = { originalEvent: e3, type: "cxttap", position: { x: pos[0], y: pos[1] } }; 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({ type: "boxend", originalEvent: e3, position: { x: pos[0], y: pos[1] } }); var eleWouldBeSelected = /* @__PURE__ */ __name(function eleWouldBeSelected2(ele) { return ele.selectable() && !ele.selected(); }, "eleWouldBeSelected"); if (cy.selectionType() === "additive") { box.emit("box").stdFilter(eleWouldBeSelected).select().emit("boxselect"); } else { if (!multSelKeyDown) { cy.$(isSelected).unmerge(box).unselect(); } box.emit("box").stdFilter(eleWouldBeSelected).select().emit("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("freeon"); draggedElements.emit("free"); if (r2.dragData.didDrag) { down.emit("dragfreeon"); draggedElements.emit("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 wheelHandler = /* @__PURE__ */ __name(function wheelHandler2(e3) { 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 (e3.deltaY != null) { diff2 = e3.deltaY / -250; } else if (e3.wheelDeltaY != null) { diff2 = e3.wheelDeltaY / 1e3; } else { diff2 = e3.wheelDelta / 1e3; } 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(e3.type === "gesturechange" ? "pinchzoom" : "scrollzoom"); } }, "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 distance2 = /* @__PURE__ */ __name(function distance3(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 now4 = r2.touchData.now; var earlier = r2.touchData.earlier; if (e3.touches[0]) { var pos = r2.projectIntoViewport(e3.touches[0].clientX, e3.touches[0].clientY); now4[0] = pos[0]; now4[1] = pos[1]; } if (e3.touches[1]) { var pos = r2.projectIntoViewport(e3.touches[1].clientX, e3.touches[1].clientY); now4[2] = pos[0]; now4[3] = pos[1]; } if (e3.touches[2]) { var pos = r2.projectIntoViewport(e3.touches[2].clientX, e3.touches[2].clientY); now4[4] = pos[0]; now4[5] = pos[1]; } 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 = distance2(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(now4[0], now4[1], true, true); var near2 = r2.findNearestElement(now4[2], now4[3], true, true); if (near1 && near1.isNode()) { near1.activate().emit({ originalEvent: e3, type: "cxttapstart", position: { x: now4[0], y: now4[1] } }); r2.touchData.start = near1; } else if (near2 && near2.isNode()) { near2.activate().emit({ originalEvent: e3, type: "cxttapstart", position: { x: now4[0], y: now4[1] } }); r2.touchData.start = near2; } else { cy.emit({ originalEvent: e3, type: "cxttapstart", position: { x: now4[0], y: now4[1] } }); } 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(now4[0], now4[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); var makeEvent = /* @__PURE__ */ __name(function makeEvent2(type3) { return { originalEvent: e3, type: type3, position: { x: now4[0], y: now4[1] } }; }, "makeEvent"); 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: now4[0], y: now4[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: now4[0], y: now4[1] }); } }, r2.tapholdDuration); } if (e3.touches.length >= 1) { var sPos = r2.touchData.startPosition = [null, null, null, null, null, null]; for (var i2 = 0; i2 < now4.length; i2++) { sPos[i2] = earlier[i2] = now4[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 now4 = 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); now4[0] = pos[0]; now4[1] = pos[1]; } if (e3.touches[1]) { var pos = r2.projectIntoViewport(e3.touches[1].clientX, e3.touches[1].clientY); now4[2] = pos[0]; now4[3] = pos[1]; } if (e3.touches[2]) { var pos = r2.projectIntoViewport(e3.touches[2].clientX, e3.touches[2].clientY); now4[4] = pos[0]; now4[5] = pos[1]; } var startGPos = r2.touchData.startGPosition; var isOverThresholdDrag; if (capture && e3.touches[0] && startGPos) { var disp = []; for (var j2 = 0; j2 < now4.length; j2++) { disp[j2] = now4[j2] - earlier[j2]; } 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 = { originalEvent: e3, type: "cxttapend", position: { x: now4[0], y: now4[1] } }; 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 = { originalEvent: e3, type: "cxtdrag", position: { x: now4[0], y: now4[1] } }; 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(now4[0], now4[1], true, true); if (!r2.touchData.cxtOver || near !== r2.touchData.cxtOver) { if (r2.touchData.cxtOver) { r2.touchData.cxtOver.emit({ originalEvent: e3, type: "cxtdragout", position: { x: now4[0], y: now4[1] } }); } r2.touchData.cxtOver = near; if (near) { near.emit({ originalEvent: e3, type: "cxtdragover", position: { x: now4[0], y: now4[1] } }); } } } 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({ originalEvent: e3, type: "boxstart", position: { x: now4[0], y: now4[1] } }); } r2.touchData.selecting = true; r2.touchData.didSelect = true; select[4] = 1; if (!select || select.length === 0 || select[0] === void 0) { select[0] = (now4[0] + now4[2] + now4[4]) / 3; select[1] = (now4[1] + now4[3] + now4[5]) / 3; select[2] = (now4[0] + now4[2] + now4[4]) / 3 + 1; select[3] = (now4[1] + now4[3] + now4[5]) / 3 + 1; } else { select[2] = (now4[0] + now4[2] + now4[4]) / 3; select[3] = (now4[1] + now4[3] + now4[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 = distance2(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("freeon"); draggedEles.emit("free"); if (r2.dragData.didDrag) { _start.emit("dragfreeon"); draggedEles.emit("dragfree"); } } cy.viewport({ zoom: zoom22, pan: pan2, cancelOnFailedZoom: true }); cy.emit("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); now4[0] = pos[0]; now4[1] = pos[1]; } if (e3.touches[1]) { var pos = r2.projectIntoViewport(e3.touches[1].clientX, e3.touches[1].clientY); now4[2] = pos[0]; now4[3] = pos[1]; } if (e3.touches[2]) { var pos = r2.projectIntoViewport(e3.touches[2].clientX, e3.touches[2].clientY); now4[4] = pos[0]; now4[5] = pos[1]; } } else if (e3.touches[0] && !r2.touchData.didSelect) { var start3 = r2.touchData.start; var last3 = r2.touchData.last; var near; if (!r2.hoverData.draggingEles && !r2.swipePanning) { near = r2.findNearestElement(now4[0], now4[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("position 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: now4[0], y: now4[1] }); if ((!start3 || !start3.grabbed()) && near != last3) { if (last3) { last3.emit({ originalEvent: e3, type: "tapdragout", position: { x: now4[0], y: now4[1] } }); } if (near) { near.emit({ originalEvent: e3, type: "tapdragover", position: { x: now4[0], y: now4[1] } }); } } r2.touchData.last = near; } if (capture) { for (var i2 = 0; i2 < now4.length; i2++) { if (now4[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("dragpan"); } else if (isOverThresholdDrag) { r2.swipePanning = true; cy.panBy({ x: dx * zoom2, y: dy * zoom2 }); cy.emit("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); now4[0] = pos[0]; now4[1] = pos[1]; } } for (var j2 = 0; j2 < now4.length; j2++) { earlier[j2] = now4[j2]; } 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 now4 = r2.touchData.now; var earlier = r2.touchData.earlier; if (e3.touches[0]) { var pos = r2.projectIntoViewport(e3.touches[0].clientX, e3.touches[0].clientY); now4[0] = pos[0]; now4[1] = pos[1]; } if (e3.touches[1]) { var pos = r2.projectIntoViewport(e3.touches[1].clientX, e3.touches[1].clientY); now4[2] = pos[0]; now4[3] = pos[1]; } if (e3.touches[2]) { var pos = r2.projectIntoViewport(e3.touches[2].clientX, e3.touches[2].clientY); now4[4] = pos[0]; now4[5] = pos[1]; } if (start3) { start3.unactivate(); } var ctxTapend; if (r2.touchData.cxt) { ctxTapend = { originalEvent: e3, type: "cxttapend", position: { x: now4[0], y: now4[1] } }; if (start3) { start3.emit(ctxTapend); } else { cy.emit(ctxTapend); } if (!r2.touchData.cxtDragged) { var ctxTap = { originalEvent: e3, type: "cxttap", position: { x: now4[0], y: now4[1] } }; 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({ type: "boxend", originalEvent: e3, position: { x: now4[0], y: now4[1] } }); var eleWouldBeSelected = /* @__PURE__ */ __name(function eleWouldBeSelected2(ele) { return ele.selectable() && !ele.selected(); }, "eleWouldBeSelected"); box.emit("box").stdFilter(eleWouldBeSelected).select().emit("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("freeon"); draggedEles.emit("free"); if (r2.dragData.didDrag) { start3.emit("dragfreeon"); draggedEles.emit("dragfree"); } } triggerEvents(start3, ["touchend", "tapend", "vmouseup", "tapdragout"], e3, { x: now4[0], y: now4[1] }); start3.unactivate(); r2.touchData.start = null; } else { var near = r2.findNearestElement(now4[0], now4[1], true, true); triggerEvents(near, ["touchend", "tapend", "vmouseup", "tapdragout"], e3, { x: now4[0], y: now4[1] }); } var dx = r2.touchData.startPosition[0] - now4[0]; var dx2 = dx * dx; var dy = r2.touchData.startPosition[1] - now4[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: now4[0], y: now4[1] }); didDoubleTouch = false; if (e3.timeStamp - prevTouchTimeStamp <= cy.multiClickDebounceTime()) { touchTimeout && clearTimeout(touchTimeout); didDoubleTouch = true; prevTouchTimeStamp = null; triggerEvents(start3, ["dbltap", "vdblclick"], e3, { x: now4[0], y: now4[1] }); } else { touchTimeout = setTimeout(function() { if (didDoubleTouch) return; triggerEvents(start3, ["onetap", "voneclick"], e3, { x: now4[0], y: now4[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 j2 = 0; j2 < now4.length; j2++) { earlier[j2] = now4[j2]; } 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 draw24(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, y5, padding2, cornerRadius) { return polygonIntersectLine(x5, y5, this.points, nodeX, nodeY, width3 / 2, height2 / 2, padding2); }, "intersectLine"), checkPoint: /* @__PURE__ */ __name(function checkPoint(x5, y5, padding2, width3, height2, centerX, centerY, cornerRadius) { return pointInsidePolygon(x5, y5, this.points, centerX, centerY, width3, height2, [0, -1], padding2); }, "checkPoint") }; }; BRp$2.generateEllipse = function() { return this.nodeShapes["ellipse"] = { renderer: this, name: "ellipse", draw: /* @__PURE__ */ __name(function draw24(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, y5, padding2, cornerRadius) { return intersectLineEllipse(x5, y5, nodeX, nodeY, width3 / 2 + padding2, height2 / 2 + padding2); }, "intersectLine"), checkPoint: /* @__PURE__ */ __name(function checkPoint(x5, y5, padding2, width3, height2, centerX, centerY, cornerRadius) { return checkInEllipse(x5, y5, width3, height2, centerX, centerY, padding2); }, "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 draw24(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, y5, padding2, cornerRadius, rs) { return roundPolygonIntersectLine(x5, y5, this.points, nodeX, nodeY, width3, height2, padding2, this.getOrCreateCorners(nodeX, nodeY, width3, height2, cornerRadius, rs, "corners")); }, "intersectLine"), checkPoint: /* @__PURE__ */ __name(function checkPoint(x5, y5, padding2, width3, height2, centerX, centerY, cornerRadius, rs) { return pointInsideRoundPolygon(x5, y5, 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 draw24(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, y5, padding2, cornerRadius) { return roundRectangleIntersectLine(x5, y5, nodeX, nodeY, width3, height2, padding2, cornerRadius); }, "intersectLine"), checkPoint: /* @__PURE__ */ __name(function checkPoint(x5, y5, padding2, 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, y5, this.points, centerX, centerY, width3, height2 - diam, [0, -1], padding2)) { return true; } if (pointInsidePolygon(x5, y5, this.points, centerX, centerY, width3 - diam, height2, [0, -1], padding2)) { return true; } if (checkInEllipse(x5, y5, diam, diam, centerX - halfWidth + cornerRadius, centerY - halfHeight + cornerRadius, padding2)) { return true; } if (checkInEllipse(x5, y5, diam, diam, centerX + halfWidth - cornerRadius, centerY - halfHeight + cornerRadius, padding2)) { return true; } if (checkInEllipse(x5, y5, diam, diam, centerX + halfWidth - cornerRadius, centerY + halfHeight - cornerRadius, padding2)) { return true; } if (checkInEllipse(x5, y5, diam, diam, centerX - halfWidth + cornerRadius, centerY + halfHeight - cornerRadius, padding2)) { 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 draw24(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, y5, padding2, cornerRadius) { var cPts = this.generateCutTrianglePts(width3 + 2 * padding2, height2 + 2 * padding2, 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, y5, pts2, nodeX, nodeY); }, "intersectLine"), checkPoint: /* @__PURE__ */ __name(function checkPoint(x5, y5, padding2, width3, height2, centerX, centerY, cornerRadius) { var cl = cornerRadius === "auto" ? this.cornerLength : cornerRadius; if (pointInsidePolygon(x5, y5, this.points, centerX, centerY, width3, height2 - 2 * cl, [0, -1], padding2)) { return true; } if (pointInsidePolygon(x5, y5, this.points, centerX, centerY, width3 - 2 * cl, height2, [0, -1], padding2)) { return true; } var cutTrianglePts = this.generateCutTrianglePts(width3, height2, centerX, centerY); return pointInsidePolygonPoints(x5, y5, cutTrianglePts.topLeft) || pointInsidePolygonPoints(x5, y5, cutTrianglePts.topRight) || pointInsidePolygonPoints(x5, y5, cutTrianglePts.bottomRight) || pointInsidePolygonPoints(x5, y5, cutTrianglePts.bottomLeft); }, "checkPoint") }; }; BRp$2.generateBarrel = function() { return this.nodeShapes["barrel"] = { renderer: this, name: "barrel", points: generateUnitNgonPointsFitToSquare(4, 0), draw: /* @__PURE__ */ __name(function draw24(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, y5, padding2, cornerRadius) { var t03 = 0.15; var t13 = 0.5; var t22 = 0.85; var bPts = this.generateBarrelBezierPts(width3 + 2 * padding2, height2 + 2 * padding2, 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 m2 = 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, m2.x, m2.y, pts3[4], pts3[5]]; }, "approximateBarrelCurvePts"); var pts2 = [].concat(approximateBarrelCurvePts(bPts.topLeft), approximateBarrelCurvePts(bPts.topRight), approximateBarrelCurvePts(bPts.bottomRight), approximateBarrelCurvePts(bPts.bottomLeft)); return polygonIntersectLine(x5, y5, 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, y5, padding2, width3, height2, centerX, centerY, cornerRadius) { var curveConstants = getBarrelCurveConstants(width3, height2); var hOffset = curveConstants.heightOffset; var wOffset = curveConstants.widthOffset; if (pointInsidePolygon(x5, y5, this.points, centerX, centerY, width3, height2 - 2 * hOffset, [0, -1], padding2)) { return true; } if (pointInsidePolygon(x5, y5, this.points, centerX, centerY, width3 - 2 * wOffset, height2, [0, -1], padding2)) { return true; } var barrelCurvePts = this.generateBarrelBezierPts(width3, height2, centerX, centerY); var getCurveT = /* @__PURE__ */ __name(function getCurveT2(x6, y6, 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 <= y6 && y6 <= 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, y5, 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 <= y5) { return true; } if (cornerPts.isBottom && y5 <= 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 draw24(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, y5, padding2, cornerRadius) { var topStartX = nodeX - (width3 / 2 + padding2); var topStartY = nodeY - (height2 / 2 + padding2); var topEndY = topStartY; var topEndX = nodeX + (width3 / 2 + padding2); var topIntersections = finiteLinesIntersect(x5, y5, nodeX, nodeY, topStartX, topStartY, topEndX, topEndY, false); if (topIntersections.length > 0) { return topIntersections; } return roundRectangleIntersectLine(x5, y5, nodeX, nodeY, width3, height2, padding2, cornerRadius); }, "intersectLine"), checkPoint: /* @__PURE__ */ __name(function checkPoint(x5, y5, padding2, width3, height2, centerX, centerY, cornerRadius) { cornerRadius = cornerRadius === "auto" ? getRoundRectangleRadius(width3, height2) : cornerRadius; var diam = 2 * cornerRadius; if (pointInsidePolygon(x5, y5, this.points, centerX, centerY, width3, height2 - diam, [0, -1], padding2)) { return true; } if (pointInsidePolygon(x5, y5, this.points, centerX, centerY, width3 - diam, height2, [0, -1], padding2)) { return true; } var outerWidth = width3 / 2 + 2 * padding2; var outerHeight = height2 / 2 + 2 * padding2; var points = [centerX - outerWidth, centerY - outerHeight, centerX - outerWidth, centerY, centerX + outerWidth, centerY, centerX + outerWidth, centerY - outerHeight]; if (pointInsidePolygonPoints(x5, y5, points)) { return true; } if (checkInEllipse(x5, y5, diam, diam, centerX + width3 / 2 - cornerRadius, centerY + height2 / 2 - cornerRadius, padding2)) { return true; } if (checkInEllipse(x5, y5, diam, diam, centerX - width3 / 2 + cornerRadius, centerY + height2 / 2 - cornerRadius, padding2)) { return true; } return false; }, "checkPoint") }; }; BRp$2.registerNodeShapes = function() { var nodeShapes = this.nodeShapes = {}; var renderer8 = 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 renderer8.generatePolygon(name, points); }; }; BRp$1 = {}; BRp$1.timeToRender = function() { return this.redrawTotalTime / this.redrawCount; }; BRp$1.redraw = function(options3) { options3 = options3 || 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 = options3; }; 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, b2) { return b2.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 renderFn2(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(renderFn2); }, "renderFn"); requestAnimationFrame2(renderFn); }; BaseRenderer = /* @__PURE__ */ __name(function BaseRenderer2(options3) { this.init(options3); }, "BaseRenderer"); BR = BaseRenderer; BRp = BR.prototype; BRp.clientFunctions = ["redrawHint", "render", "renderTo", "matchCanvasSize", "nodeShapeImpl", "arrowShapeImpl"]; BRp.init = function(options3) { var r2 = this; r2.options = options3; r2.cy = options3.cy; var ctr = r2.container = options3.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 = options3.showFps; r2.debug = options3.debug; r2.hideEdgesOnViewport = options3.hideEdgesOnViewport; r2.textureOnViewport = options3.textureOnViewport; r2.wheelSensitivity = options3.wheelSensitivity; r2.motionBlurEnabled = options3.motionBlur; r2.forcedPixelRatio = number$1(options3.pixelRatio) ? options3.pixelRatio : null; r2.motionBlur = options3.motionBlur; r2.motionBlurOpacity = options3.motionBlurOpacity; r2.motionBlurTransparency = 1 - r2.motionBlurOpacity; r2.motionBlurPxRatio = 1; r2.mbPxRBlurry = 1; r2.minMbLowQualFrames = 4; r2.fullQualityMb = false; r2.clearedForMotionBlur = []; r2.desktopTapThreshold = options3.desktopTapThreshold; r2.desktopTapThreshold2 = options3.desktopTapThreshold * options3.desktopTapThreshold; r2.touchTapThreshold = options3.touchTapThreshold; r2.touchTapThreshold2 = options3.touchTapThreshold * options3.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 === "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 b2 = binding; var tgt = b2.target; (tgt.off || tgt.removeEventListener).apply(tgt, b2.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_1(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 now4 = performanceNow(); var duration = now4 - startTime; var frameDuration = now4 - 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$2(); this.keyForId = new Map$2(); this.cachesByLvl = new Map$2(); this.lvls = []; this.getKey = getKey3; this.doesEleInvalidateKey = doesEleInvalidateKey; } __name(ElementTextureCacheLookup2, "ElementTextureCacheLookup"); _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, id28) { if (key != null) { this.getIdsFor(key).add(id28); } }, "addIdForKey") }, { key: "deleteIdForKey", value: /* @__PURE__ */ __name(function deleteIdForKey(key, id28) { if (key != null) { this.getIdsFor(key)["delete"](id28); } }, "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 id28 = ele.id(); var prevKey = this.keyForId.get(id28); var currKey = this.getKey(ele); this.deleteIdForKey(prevKey, id28); this.addIdForKey(currKey, id28); this.keyForId.set(id28, currKey); }, "updateKeyMappingFor") }, { key: "deleteKeyMappingFor", value: /* @__PURE__ */ __name(function deleteKeyMappingFor(ele) { var id28 = ele.id(); var prevKey = this.keyForId.get(id28); this.deleteIdForKey(prevKey, id28); this.keyForId["delete"](id28); }, "deleteKeyMappingFor") }, { key: "keyHasChangedFor", value: /* @__PURE__ */ __name(function keyHasChangedFor(ele) { var id28 = ele.id(); var prevKey = this.keyForId.get(id28); 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$2(); 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 has2(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 set6(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 id28 = ele.id(); var key = this.keyForId.get(id28); this.deleteKeyMappingFor(ele); var entireKeyInvalidated = this.doesEleInvalidateKey(ele); if (entireKeyInvalidated) { this.invalidateKey(key); } return entireKeyInvalidated || this.getNumberOfIdsForKey(key) === 0; }, "invalidate") }]); return ElementTextureCacheLookup2; }(); 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(renderer8, initOptions) { var self2 = this; self2.renderer = renderer8; 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 q2 = self2.eleCacheQueue = self2.eleCacheQueue || new heap(function(a2, b2) { return b2.reqs - a2.reqs; }); return q2; }; 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 scale = Math.pow(2, lvl); var eleScaledH = bb.h * scale; var eleScaledW = bb.w * scale; var scaledLabelShown = r2.eleTextBiggerThanMin(ele, scale); 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 l2 = lvl + 1; l2 <= maxLvl$1; l2++) { var c3 = lookup2.get(ele, l2); 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(scale, scale); this.drawElement(txr.context, ele, bb, scaledLabelShown, false); txr.context.scale(1 / scale, 1 / scale); txr.context.translate(-txr.usedWidth, 0); } eleCache = { x: txr.usedWidth, texture: txr, level: lvl, scale, 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 q2 = 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++; q2.updateItem(existingReq); } else { var req = { eles: ele.spawn().merge(ele), level: lvl, reqs: 1, key }; q2.push(req); k2q[key] = req; } }; ETCp.dequeue = function(pxRatio) { var self2 = this; var q2 = self2.getElementQueue(); var k2q = self2.getElementKeyToQueue(); var dequeued = []; var lookup2 = self2.lookup; for (var i2 = 0; i2 < maxDeqSize$1; i2++) { if (q2.size() > 0) { var req = q2.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 q2 = 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; q2.updateItem(req); q2.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 j2 = 0; j2 < eles.length; j2++) { var bb = eles[j2].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; useHighQualityEleTxrReqs = true; LayeredTextureCache = /* @__PURE__ */ __name(function LayeredTextureCache2(renderer8) { var self2 = this; var r2 = self2.renderer = renderer8; var cy = r2.cy; self2.layersByLevel = {}; self2.firstGet = true; self2.lastInvalidationTime = performanceNow() - 2 * invalidThreshold; self2.skipping = false; self2.eleTxrDeqs = cy.collection(); self2.scheduleElementRefinement = debounce_1(function() { self2.refineElementTextures(self2.eleTxrDeqs); self2.eleTxrDeqs.unmerge(self2.eleTxrDeqs); }, refineEleDebounceTime); r2.beforeRender(function(willDraw, now4) { if (now4 - self2.lastInvalidationTime <= invalidThreshold) { self2.skipping = true; } else { self2.skipping = false; } }, r2.beforeRenderPriorities.lyrTxrSkip); var qSort = /* @__PURE__ */ __name(function qSort2(a2, b2) { return b2.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 scale = Math.pow(2, lvl); var w3 = Math.ceil(bb.w * scale); var h2 = Math.ceil(bb.h * scale); var canvas = this.renderer.makeOffscreenCanvas(w3, h2); var layer = { id: layerIdPool = ++layerIdPool % MAX_INT, bb, level: lvl, width: w3, height: h2, 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(scale, scale); 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 scale = 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(l2) { self2.validateLayersElesOrdering(l2, eles); if (self2.levelIsComplete(l2, eles)) { tmpLayers = layersByLvl[l2]; return true; } }, "canUseAsTmpLvl"); var checkLvls = /* @__PURE__ */ __name(function checkLvls2(dir2) { if (tmpLayers) { return; } for (var l2 = lvl + dir2; minLvl <= l2 && l2 <= maxLvl; l2 += dir2) { if (canUseAsTmpLvl(l2)) { 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 area = bb.w * scale * (bb.h * scale); 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 j2 = 0; j2 < eles.length; j2++) { if (layer.eles[0] === eles[j2]) { offset = j2; break; } } if (offset < 0) { this.invalidateLayer(layer); continue; } var o2 = offset; for (var j2 = 0; j2 < layer.eles.length; j2++) { if (layer.eles[j2] !== eles[o2 + j2]) { 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 l2 = minLvl; l2 <= maxLvl; l2++) { var layer = caches[l2]; 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 l2 = minLvl; l2 <= maxLvl; l2++) { var layers = self2.layersByLevel[l2]; 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 q2 = 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++; q2.updateItem(layer); } else { layer.reqs = 1; q2.push(layer); } }; LTCp.dequeue = function(pxRatio) { var self2 = this; var q2 = self2.layersQueue; var deqd = []; var eleDeqs = 0; while (eleDeqs < maxDeqSize) { if (q2.size() === 0) { break; } var layer = q2.peek(); if (layer.replacement) { q2.pop(); continue; } if (layer.replaces && layer !== layer.replaces.replacement) { q2.pop(); continue; } if (layer.invalid) { q2.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) { q2.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_1(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$a = {}; __name(polygon, "polygon"); __name(triangleBackcurve, "triangleBackcurve"); __name(triangleTee, "triangleTee"); __name(circleTriangle, "circleTriangle"); __name(circle3, "circle"); CRp$a.arrowShapeImpl = function(name) { return (impl || (impl = { "polygon": polygon, "triangle-backcurve": triangleBackcurve, "triangle-tee": triangleTee, "circle-triangle": circleTriangle, "triangle-cross": triangleTee, "circle": circle3 }))[name]; }; CRp$9 = {}; CRp$9.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$9.drawElementOverlay = function(context, ele) { var r2 = this; if (ele.isNode()) { r2.drawNodeOverlay(context, ele); } else { r2.drawEdgeOverlay(context, ele); } }; CRp$9.drawElementUnderlay = function(context, ele) { var r2 = this; if (ele.isNode()) { r2.drawNodeUnderlay(context, ele); } else { r2.drawEdgeUnderlay(context, ele); } }; CRp$9.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, w3 = bb.w, h2 = bb.h; var x5, y5, 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; y5 = off.y; } else { x5 = x1; y5 = 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, y5, w3, h2); 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$9.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$9.drawElements = function(context, eles) { var r2 = this; for (var i2 = 0; i2 < eles.length; i2++) { var ele = eles[i2]; r2.drawElement(context, ele); } }; CRp$9.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$9.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$9.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$8 = {}; CRp$8.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 drawLine = /* @__PURE__ */ __name(function drawLine2() { 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); drawLine(effectiveGhostOpacity); drawArrows2(effectiveGhostOpacity); context.translate(-gx, -gy); } else { drawLineOutline(); } drawUnderlay(); drawLine(); 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 padding2 = edge.pstyle("".concat(overlayOrUnderlay, "-padding")).pfValue; var width3 = 2 * padding2; 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$8.drawEdgeOverlay = drawEdgeOverlayUnderlay("overlay"); CRp$8.drawEdgeUnderlay = drawEdgeOverlayUnderlay("underlay"); CRp$8.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$8.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$8.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$8.drawArrowhead = function(context, edge, prefix, x5, y5, angle2, opacity) { if (isNaN(x5) || x5 == null || isNaN(y5) || y5 == 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, y5, 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, y5, angle2); }; CRp$8.drawArrowShape = function(edge, context, fill, edgeWidth, shape, shapeWidth, x5, y5, angle2) { var r2 = this; var usePaths = this.usePaths() && shape !== "triangle-cross"; var pathCacheHit = false; var path4; var canvasContext = context; var translation = { x: x5, y: y5 }; var scale = edge.pstyle("arrow-scale").value; var size5 = this.getArrowWidth(edgeWidth, scale); var shapeImpl = r2.arrowShapes[shape]; if (usePaths) { var cache3 = r2.arrowPathCache = r2.arrowPathCache || []; var key = hashString(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, size5, angle2, translation, edgeWidth); } if (context.closePath) { context.closePath(); } } context = canvasContext; if (usePaths) { context.translate(x5, y5); context.rotate(angle2); context.scale(size5, size5); } if (fill === "filled" || fill === "both") { if (usePaths) { context.fill(path4); } else { context.fill(); } } if (fill === "hollow" || fill === "both") { context.lineWidth = shapeWidth / (usePaths ? size5 : 1); context.lineJoin = "miter"; if (usePaths) { context.stroke(path4); } else { context.stroke(); } } if (usePaths) { context.scale(1 / size5, 1 / size5); context.rotate(-angle2); context.translate(-x5, -y5); } }; CRp$7 = {}; CRp$7.safeDrawImage = function(context, img, ix, iy, iw, ih, x5, y5, w3, h2) { if (iw <= 0 || ih <= 0 || w3 <= 0 || h2 <= 0) { return; } try { context.drawImage(img, ix, iy, iw, ih, x5, y5, w3, h2); } catch (e3) { warn(e3); } }; CRp$7.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 w3 = imgW; var h2 = imgH; if (getIndexedStyle(node2, "background-width", "value", index) !== "auto") { if (getIndexedStyle(node2, "background-width", "units", index) === "%") { w3 = getIndexedStyle(node2, "background-width", "pfValue", index) * nodeTW; } else { w3 = getIndexedStyle(node2, "background-width", "pfValue", index); } } if (getIndexedStyle(node2, "background-height", "value", index) !== "auto") { if (getIndexedStyle(node2, "background-height", "units", index) === "%") { h2 = getIndexedStyle(node2, "background-height", "pfValue", index) * nodeTH; } else { h2 = getIndexedStyle(node2, "background-height", "pfValue", index); } } if (w3 === 0 || h2 === 0) { return; } if (fit2 === "contain") { var scale = Math.min(nodeTW / w3, nodeTH / h2); w3 *= scale; h2 *= scale; } else if (fit2 === "cover") { var scale = Math.max(nodeTW / w3, nodeTH / h2); w3 *= scale; h2 *= scale; } 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 - w3) * 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 - w3) * offXPfVal; } else { x5 += offXPfVal; } var y5 = nodeY - nodeTH / 2; var posYUnits = getIndexedStyle(node2, "background-position-y", "units", index); var posYPfVal = getIndexedStyle(node2, "background-position-y", "pfValue", index); if (posYUnits === "%") { y5 += (nodeTH - h2) * posYPfVal; } else { y5 += posYPfVal; } var offYUnits = getIndexedStyle(node2, "background-offset-y", "units", index); var offYPfVal = getIndexedStyle(node2, "background-offset-y", "pfValue", index); if (offYUnits === "%") { y5 += (nodeTH - h2) * offYPfVal; } else { y5 += offYPfVal; } if (rs.pathCache) { x5 -= nodeX; y5 -= 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, y5, w3, h2); 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, y5); context.fill(); context.translate(-x5, -y5); } context.globalAlpha = gAlpha; if (isSmoothingSwitched) { r2.setImgSmoothing(context, smoothingEnabled); } }; CRp$6 = {}; CRp$6.eleTextBiggerThanMin = function(ele, scale) { if (!scale) { var zoom2 = ele.cy().zoom(); var pxRatio = this.getPixelRatio(); var lvl = Math.ceil(log22(zoom2 * pxRatio)); scale = Math.pow(2, lvl); } var computedSize = ele.pstyle("font-size").pfValue * scale; var minSize = ele.pstyle("min-zoomed-font-size").pfValue; if (computedSize < minSize) { return false; } return true; }; CRp$6.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$6.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$6.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(roundRect, "roundRect"); CRp$6.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"); var textAngle = getPrefixedProperty(rscratch, "labelAngle", prefix); if (rotation.strValue === "autorotate") { theta = ele.isEdge() ? textAngle : 0; } else if (rotation.strValue === "none") { theta = 0; } else { theta = rotation.pfValue; } return theta; }; CRp$6.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 text3 = this.getLabelText(ele, prefix); if (text3 != null && text3 !== "" && !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.indexOf("round") === 0; var roundRadius = 2; if (backgroundOpacity > 0 || 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 (backgroundOpacity > 0) { var textFill = context.fillStyle; var textBackgroundColor = ele.pstyle("text-background-color").value; context.fillStyle = "rgba(" + textBackgroundColor[0] + "," + textBackgroundColor[1] + "," + textBackgroundColor[2] + "," + backgroundOpacity * parentOpacity + ")"; if (rounded) { roundRect(context, bgX, bgY, bgW, bgH, roundRadius); } else { context.fillRect(bgX, bgY, bgW, bgH); } context.fillStyle = textFill; } if (textBorderWidth > 0 && borderOpacity > 0) { var textStroke = context.strokeStyle; var textLineWidth = context.lineWidth; var textBorderColor = ele.pstyle("text-border-color").value; var textBorderStyle = ele.pstyle("text-border-style").value; context.strokeStyle = "rgba(" + textBorderColor[0] + "," + textBorderColor[1] + "," + textBorderColor[2] + "," + 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": context.setLineDash([]); break; } } if (rounded) { roundRect(context, bgX, bgY, bgW, bgH, roundRadius, "stroke"); } else { context.strokeRect(bgX, bgY, bgW, bgH); } if (textBorderStyle === "double") { var whiteWidth = textBorderWidth / 2; if (rounded) { roundRect(context, bgX + whiteWidth, bgY + whiteWidth, bgW - whiteWidth * 2, bgH - whiteWidth * 2, roundRadius, "stroke"); } else { context.strokeRect(bgX + whiteWidth, bgY + whiteWidth, bgW - whiteWidth * 2, bgH - whiteWidth * 2); } } if (context.setLineDash) { context.setLineDash([]); } context.lineWidth = textLineWidth; context.strokeStyle = textStroke; } } 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 l2 = 0; l2 < lines.length; l2++) { if (lineWidth > 0) { context.strokeText(lines[l2], textX, textY); } context.fillText(lines[l2], textX, textY); textY += lineHeight; } } else { if (lineWidth > 0) { context.strokeText(text3, textX, textY); } context.fillText(text3, textX, textY); } if (theta !== 0) { context.rotate(-theta); context.translate(-orgTextX, -orgTextY); } } }; CRp$5 = {}; CRp$5.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 padding2 = node2.padding(); nodeWidth = node2.width() + 2 * padding2; nodeHeight = node2.height() + 2 * padding2; 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 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 _i3 = 0; _i3 < points.length / 2; _i3++) { p3[_i3] = { x: npos.x + offsetX + halfW * points[_i3 * 2], y: npos.y + offsetY + halfH * points[_i3 * 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]; corners[_i2] = 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); 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); 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 padding2 = 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 + padding2 * 2, nodeHeight + padding2 * 2, radius2); context.fill(); } }; }, "drawNodeOverlayUnderlay"); CRp$5.drawNodeOverlay = drawNodeOverlayUnderlay("overlay"); CRp$5.drawNodeUnderlay = drawNodeOverlayUnderlay("underlay"); CRp$5.hasPie = function(node2) { node2 = node2[0]; return node2._private.hasPie; }; CRp$5.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 x5 = pos.x; var y5 = pos.y; var nodeW = node2.width(); var nodeH = node2.height(); var radius2 = Math.min(nodeW, nodeH) / 2; var lastPercent = 0; var usePaths = this.usePaths(); if (usePaths) { x5 = 0; y5 = 0; } if (pieSize.units === "%") { radius2 = radius2 * pieSize.pfValue; } else if (pieSize.pfValue !== void 0) { radius2 = pieSize.pfValue / 2; } for (var i2 = 1; i2 <= cyStyle.pieBackgroundN; i2++) { var size5 = 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 = size5 / 100; if (percent + lastPercent > 1) { percent = 1 - lastPercent; } var angleStart = 1.5 * Math.PI + 2 * Math.PI * lastPercent; var angleDelta = 2 * Math.PI * percent; var angleEnd = angleStart + angleDelta; if (size5 === 0 || lastPercent >= 1 || lastPercent + percent > 1) { continue; } context.beginPath(); context.moveTo(x5, y5); context.arc(x5, y5, radius2, angleStart, angleEnd); context.closePath(); this.colorFillStyle(context, color2[0], color2[1], color2[2], opacity); context.fill(); lastPercent += percent; } }; CRp$4 = {}; motionBlurDelay = 100; CRp$4.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$4.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$4.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 d2 = dist(end2, mid); gradientStyle = context.createRadialGradient(mid.x, mid.y, 0, mid.x, mid.y, Math.max(d1, d2)); } 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 direction4 = ele.pstyle("background-gradient-direction").value; switch (direction4) { 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$4.gradientFillStyle = function(context, ele, fill, opacity) { var gradientStyle = this.createGradientStyleFor(context, "background", ele, fill, opacity); if (!gradientStyle) return null; context.fillStyle = gradientStyle; }; CRp$4.colorFillStyle = function(context, r2, g2, b2, a2) { context.fillStyle = "rgba(" + r2 + "," + g2 + "," + b2 + "," + a2 + ")"; }; CRp$4.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$4.gradientStrokeStyle = function(context, ele, fill, opacity) { var gradientStyle = this.createGradientStyleFor(context, "line", ele, fill, opacity); if (!gradientStyle) return null; context.strokeStyle = gradientStyle; }; CRp$4.colorStrokeStyle = function(context, r2, g2, b2, a2) { context.strokeStyle = "rgba(" + r2 + "," + g2 + "," + b2 + "," + a2 + ")"; }; CRp$4.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$4.matchCanvasSize = function(container2) { var r2 = this; var data5 = 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 = data5.canvasContainer; canvasContainer.style.width = width3 + "px"; canvasContainer.style.height = height2 + "px"; for (var i2 = 0; i2 < r2.CANVAS_LAYERS; i2++) { canvas = data5.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 = data5.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 = data5.bufferCanvases[r2.TEXTURE_BUFFER]; r2.textureMult = 2; canvas.width = canvasWidth * r2.textureMult; canvas.height = canvasHeight * r2.textureMult; } r2.canvasWidth = canvasWidth; r2.canvasHeight = canvasHeight; }; CRp$4.renderTo = function(cxt, zoom2, pan2, pxRatio) { this.render({ forcedContext: cxt, forcedZoom: zoom2, forcedPan: pan2, drawAllLayers: true, forcedPxRatio: pxRatio }); }; CRp$4.render = function(options3) { options3 = options3 || staticEmptyObject(); var forcedContext = options3.forcedContext; var drawAllLayers = options3.drawAllLayers; var drawOnlyNodeLayer = options3.drawOnlyNodeLayer; var forcedZoom = options3.forcedZoom; var forcedPan = options3.forcedPan; var r2 = this; var pixelRatio = options3.forcedPxRatio === void 0 ? this.getPixelRatio() : options3.forcedPxRatio; var cy = r2.cy; var data5 = r2.data; var needDraw = data5.canvasNeedsRedraw; var textureDraw = r2.textureOnViewport && !forcedContext && (r2.pinching || r2.hoverData.dragging || r2.swipePanning || r2.data.wheelZooming); var motionBlur = options3.motionBlur !== void 0 ? options3.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, y5, w3, h2) { var gco = context2.globalCompositeOperation; context2.globalCompositeOperation = "destination-out"; r2.colorFillStyle(context2, 255, 255, 255, r2.motionBlurTransparency); context2.fillRect(x5, y5, w3, h2); context2.globalCompositeOperation = gco; } __name(mbclear, "mbclear"); function setContextTransform(context2, clear28) { var ePan, eZoom, w3, h2; if (!r2.clearingMotionBlur && (context2 === data5.bufferContexts[r2.MOTIONBLUR_BUFFER_NODE] || context2 === data5.bufferContexts[r2.MOTIONBLUR_BUFFER_DRAG])) { ePan = { x: pan2.x * mbPxRatio, y: pan2.y * mbPxRatio }; eZoom = zoom2 * mbPxRatio; w3 = r2.canvasWidth * mbPxRatio; h2 = r2.canvasHeight * mbPxRatio; } else { ePan = effectivePan; eZoom = effectiveZoom; w3 = r2.canvasWidth; h2 = r2.canvasHeight; } context2.setTransform(1, 0, 0, 1, 0, 0); if (clear28 === "motionBlur") { mbclear(context2, 0, 0, w3, h2); } else if (!forcedContext && (clear28 === void 0 || clear28)) { context2.clearRect(0, 0, w3, h2); } 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(setContextTransform, "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 = data5.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(); setContextTransform(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] : data5.contexts[r2.NODE]); var clear27 = motionBlur && !useBuffer ? "motionBlur" : void 0; setContextTransform(context, clear27); 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] : data5.contexts[r2.DRAG]); setContextTransform(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; } } if (r2.showFps || !drawOnlyNodeLayer && needDraw[r2.SELECT_BOX] && !drawAllLayers) { var context = forcedContext || data5.contexts[r2.SELECT_BOX]; setContextTransform(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 (data5.bgActivePosistion && !r2.hoverData.selecting) { var zoom2 = r2.cy.zoom(); var pos = data5.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); 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.lineWidth = 1; context.fillText("1 frame = " + timeToRender + " ms = " + fps + " fps", 0, 20); var maxFps = 60; context.strokeRect(0, 30, 250, 20); context.fillRect(0, 30, 250 * Math.min(fps / maxFps, 1), 20); } if (!drawAllLayers) { needDraw[r2.SELECT_BOX] = false; } } if (motionBlur && mbPxRatio !== 1) { var cxtNode = data5.contexts[r2.NODE]; var txtNode = r2.data.bufferCanvases[r2.MOTIONBLUR_BUFFER_NODE]; var cxtDrag = data5.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$3 = {}; CRp$3.drawPolygonPath = function(context, x5, y5, width3, height2, points) { var halfW = width3 / 2; var halfH = height2 / 2; if (context.beginPath) { context.beginPath(); } context.moveTo(x5 + halfW * points[0], y5 + halfH * points[1]); for (var i2 = 1; i2 < points.length / 2; i2++) { context.lineTo(x5 + halfW * points[i2 * 2], y5 + halfH * points[i2 * 2 + 1]); } context.closePath(); }; CRp$3.drawRoundPolygonPath = function(context, x5, y5, width3, height2, points, corners) { corners.forEach(function(corner) { return drawPreparedRoundCorner(context, corner); }); context.closePath(); }; CRp$3.drawRoundRectanglePath = function(context, x5, y5, 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, y5 - halfHeight); context.arcTo(x5 + halfWidth, y5 - halfHeight, x5 + halfWidth, y5, cornerRadius); context.arcTo(x5 + halfWidth, y5 + halfHeight, x5, y5 + halfHeight, cornerRadius); context.arcTo(x5 - halfWidth, y5 + halfHeight, x5 - halfWidth, y5, cornerRadius); context.arcTo(x5 - halfWidth, y5 - halfHeight, x5, y5 - halfHeight, cornerRadius); context.lineTo(x5, y5 - halfHeight); context.closePath(); }; CRp$3.drawBottomRoundRectanglePath = function(context, x5, y5, 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, y5 - halfHeight); context.lineTo(x5 + halfWidth, y5 - halfHeight); context.lineTo(x5 + halfWidth, y5); context.arcTo(x5 + halfWidth, y5 + halfHeight, x5, y5 + halfHeight, cornerRadius); context.arcTo(x5 - halfWidth, y5 + halfHeight, x5 - halfWidth, y5, cornerRadius); context.lineTo(x5 - halfWidth, y5 - halfHeight); context.lineTo(x5, y5 - halfHeight); context.closePath(); }; CRp$3.drawCutRectanglePath = function(context, x5, y5, 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, y5 - halfHeight); context.lineTo(x5 + halfWidth - cornerLength, y5 - halfHeight); context.lineTo(x5 + halfWidth, y5 - halfHeight + cornerLength); context.lineTo(x5 + halfWidth, y5 + halfHeight - cornerLength); context.lineTo(x5 + halfWidth - cornerLength, y5 + halfHeight); context.lineTo(x5 - halfWidth + cornerLength, y5 + halfHeight); context.lineTo(x5 - halfWidth, y5 + halfHeight - cornerLength); context.lineTo(x5 - halfWidth, y5 - halfHeight + cornerLength); context.closePath(); }; CRp$3.drawBarrelPath = function(context, x5, y5, width3, height2) { var halfWidth = width3 / 2; var halfHeight = height2 / 2; var xBegin = x5 - halfWidth; var xEnd = x5 + halfWidth; var yBegin = y5 - halfHeight; var yEnd = y5 + 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(w3, h2) { var buffer = document.createElement("canvas"); buffer.width = w3; buffer.height = h2; return [buffer, buffer.getContext("2d")]; }; CRp$2.bufferCanvasImage = function(options3) { var cy = this.cy; var eles = cy.mutableElements(); var bb = eles.boundingBox(); var ctrRect = this.findContainerClientCoords(); var width3 = options3.full ? Math.ceil(bb.w) : ctrRect[2]; var height2 = options3.full ? Math.ceil(bb.h) : ctrRect[3]; var specdMaxDims = number$1(options3.maxWidth) || number$1(options3.maxHeight); var pxRatio = this.getPixelRatio(); var scale = 1; if (options3.scale !== void 0) { width3 *= options3.scale; height2 *= options3.scale; scale = options3.scale; } else if (specdMaxDims) { var maxScaleW = Infinity; var maxScaleH = Infinity; if (number$1(options3.maxWidth)) { maxScaleW = scale * options3.maxWidth / width3; } if (number$1(options3.maxHeight)) { maxScaleH = scale * options3.maxHeight / height2; } scale = Math.min(maxScaleW, maxScaleH); width3 *= scale; height2 *= scale; } if (!specdMaxDims) { width3 *= pxRatio; height2 *= pxRatio; scale *= 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 (options3.full) { buffCxt.translate(-bb.x1 * scale, -bb.y1 * scale); buffCxt.scale(scale, scale); this.drawElements(buffCxt, zsortedEles); buffCxt.scale(1 / scale, 1 / scale); buffCxt.translate(bb.x1 * scale, bb.y1 * scale); } else { var pan2 = cy.pan(); var translation = { x: pan2.x * scale, y: pan2.y * scale }; scale *= cy.zoom(); buffCxt.translate(translation.x, translation.y); buffCxt.scale(scale, scale); this.drawElements(buffCxt, zsortedEles); buffCxt.scale(1 / scale, 1 / scale); buffCxt.translate(-translation.x, -translation.y); } if (options3.bg) { buffCxt.globalCompositeOperation = "destination-over"; buffCxt.fillStyle = options3.bg; buffCxt.rect(0, 0, width3, height2); buffCxt.fill(); } } return buffCanvas; }; __name(b64ToBlob, "b64ToBlob"); __name(b64UriToB64, "b64UriToB64"); __name(output, "output"); CRp$2.png = function(options3) { return output(options3, this.bufferCanvasImage(options3), "image/png"); }; CRp$2.jpg = function(options3) { return output(options3, this.bufferCanvasImage(options3), "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.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; } }; 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$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); }); renderer5 = [{ name: "null", impl: NullRenderer }, { name: "base", impl: BR }, { name: "canvas", impl: CR }]; incExts = [{ type: "layout", extensions: layout4 }, { type: "renderer", extensions: renderer5 }]; 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 Stylesheet2() { if (!(this instanceof Stylesheet2)) { return new Stylesheet2(); } 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 map5 = name; var propNames = Object.keys(map5); for (var j2 = 0; j2 < propNames.length; j2++) { var key = propNames[j2]; var mapVal = map5[key]; if (mapVal == null) { continue; } var prop = Style2.properties[key] || Style2.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 Style2(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 j2 = 0; j2 < props.length; j2++) { var prop = props[j2]; style3.css(prop.name, prop.value); } } return style3; }; version3 = "3.30.2"; cytoscape2 = /* @__PURE__ */ __name(function cytoscape3(options3) { if (options3 === void 0) { options3 = {}; } if (plainObject(options3)) { return new Core(options3); } else if (string(options3)) { 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 = version3; cytoscape2.stylesheet = cytoscape2.Stylesheet = Stylesheet; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/layout-base/layout-base.js var require_layout_base = __commonJS({ "../../node_modules/.pnpm/[email protected]/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, property2) { return Object.prototype.hasOwnProperty.call(object3, property2); }; __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, size5, vNode) { if (size5 == 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 (size5 != null && loc != null) this.rect = new RectangleD(loc.x, loc.y, size5.width, size5.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, y5) { this.rect.x = x5; this.rect.y = y5; }; 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 nodes7 = this.child.getNodes(); for (var i2 = 0; i2 < nodes7.length; i2++) { childNode = nodes7[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 nodes7 = this.child.getNodes(); for (var i2 = 0; i2 < nodes7.length; i2++) { childNode = nodes7[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, y5) { if (x5 == null && y5 == null) { this.x = 0; this.y = 0; } else { this.x = x5; this.y = y5; } } __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(y5) { this.y = y5; }; 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 nodes7 = this.getNodes(); var s2 = nodes7.length; for (var i2 = 0; i2 < s2; i2++) { var lNode = nodes7[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 (nodes7[0].getParent().paddingLeft != void 0) { margin = nodes7[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 nodes7 = this.nodes; var s2 = nodes7.length; for (var i2 = 0; i2 < s2; i2++) { var lNode = nodes7[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 (nodes7[0].getParent().paddingLeft != void 0) { margin = nodes7[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(nodes7) { 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 = nodes7.length; for (var i2 = 0; i2 < s2; i2++) { var lNode = nodes7[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 size5 = 0; var nodes7 = this.nodes; var s2 = nodes7.length; for (var i2 = 0; i2 < s2; i2++) { var lNode = nodes7[i2]; size5 += lNode.calcEstimatedSize(); } if (size5 == 0) { this.estimatedSize = LayoutConstants.EMPTY_COMPOUND_NODE_SIZE; } else { this.estimatedSize = size5 / 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 size5 = neighborEdges.length; for (var i2 = 0; i2 < size5; 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(layout6) { LGraph = __webpack_require__(5); this.layout = layout6; 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 edges5 = this.getAllEdges(); var s2 = edges5.length; for (var i2 = 0; i2 < s2; i2++) { edge = edges5[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 nodes7 = graph.getNodes(); var s2 = nodes7.length; for (var i2 = 0; i2 < s2; i2++) { node2 = nodes7[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, f22) { if (f22 == 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 = f22.x; var y42 = f22.y; var x5 = void 0, y5 = void 0; var a1 = void 0, a2 = void 0, b1 = void 0, b2 = 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; b2 = x32 - x42; c22 = x42 * y32 - x32 * y42; denom = a1 * b2 - a2 * b1; if (denom === 0) { return null; } x5 = (b1 * c22 - b2 * c1) / denom; y5 = (a2 * c1 - a1 * c22) / denom; return new Point3(x5, y5); }; 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 b2 = p1.y; var c3 = p22.x; var d2 = p22.y; var p5 = p3.x; var q2 = p3.y; var r2 = p4.x; var s2 = p4.y; var det = (c3 - a2) * (s2 - q2) - (r2 - p5) * (d2 - b2); if (det === 0) { return false; } else { var lambda = ((s2 - q2) * (r2 - a2) + (p5 - r2) * (s2 - b2)) / det; var gamma2 = ((b2 - d2) * (r2 - a2) + (c3 - a2) * (s2 - b2)) / 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, list2) { if (prev2 !== null) { prev2.next = node2; } else { list2.head = node2; } if (next3 !== null) { next3.prev = node2; } else { list2.tail = node2; } node2.prev = prev2; node2.next = next3; list2.length++; return node2; }, "add"); var _remove = /* @__PURE__ */ __name(function _remove2(node2, list2) { var prev2 = node2.prev, next3 = node2.next; if (prev2 !== null) { prev2.next = next3; } else { list2.head = next3; } if (next3 !== null) { next3.prev = prev2; } else { list2.tail = prev2; } node2.prev = node2.next = null; list2.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 size5() { 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, y5, p3) { this.x = null; this.y = null; if (x5 == null && y5 == null && p3 == null) { this.x = 0; this.y = 0; } else if (typeof x5 == "number" && typeof y5 == "number" && p3 == null) { this.x = x5; this.y = y5; } else if (x5.constructor.name == "Point" && y5 == 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, y5, p3) { if (x5.constructor.name == "Point" && y5 == null && p3 == null) { p3 = x5; this.setLocation(p3.x, p3.y); } else if (typeof x5 == "number" && typeof y5 == "number" && p3 == null) { if (parseInt(x5) == x5 && parseInt(y5) == y5) { this.move(x5, y5); } else { this.x = Math.floor(x5 + 0.5); this.y = Math.floor(y5 + 0.5); } } }; Point3.prototype.move = function(x5, y5) { this.x = x5; this.y = y5; }; 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, y5, width3, height2) { this.x = 0; this.y = 0; this.width = 0; this.height = 0; if (x5 != null && y5 != null && width3 != null && height2 != null) { this.x = x5; this.y = y5; 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(y5) { this.y = y5; }; 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(id28) { if (id28 == null) id28 = UniqueIDGeneretor.lastID; return "Object#" + id28; }; 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 _toConsumableArray(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(_toConsumableArray, "_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 Emitter3 = __webpack_require__(27); function Layout2(isRemoteUse) { Emitter3.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(Emitter3.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 nodes7 = this.graphManager.getRoot().getNodes(); for (var i2 = 0; i2 < nodes7.length; i2++) { node2 = nodes7[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 nodes7 = node2.getChild().getNodes(); for (var i2 = 0; i2 < nodes7.length; i2++) { update(nodes7[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 nodes7 = this.getAllNodes(); var node2; for (var i2 = 0; i2 < nodes7.length; i2++) { node2 = nodes7[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 nodes7 = graph.getNodes(); for (var i2 = 0; i2 < nodes7.length; i2++) { lNode = nodes7[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(_toConsumableArray(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 edges5 = []; edges5 = edges5.concat(this.graphManager.getAllEdges()); edges5 = [].concat(_toConsumableArray(this.edgeToDummyNodes.keys())).concat(edges5); for (var k2 = 0; k2 < edges5.length; k2++) { var lEdge = edges5[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, b2; if (sliderValue <= 50) { a2 = 9 * defaultValue / 500; b2 = defaultValue / 10; } else { a2 = 9 * defaultValue / 50; b2 = -8 * defaultValue; } return a2 * sliderValue + b2; } }; Layout2.findCenterOfTree = function(nodes7) { var list2 = []; list2 = list2.concat(nodes7); var removedNodes = []; var remainingDegrees = /* @__PURE__ */ new Map(); var foundCenter = false; var centerNode = null; if (list2.length == 1 || list2.length == 2) { foundCenter = true; centerNode = list2[0]; } for (var i2 = 0; i2 < list2.length; i2++) { var node2 = list2[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 < list2.length; i2++) { var node2 = list2[i2]; var index = list2.indexOf(node2); if (index >= 0) { list2.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 (list2.length == 1 || list2.length == 2) { foundCenter = true; centerNode = list2[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, y5) { 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(y5) { var yDevice = 0; var worldExtY = this.lworldExtY; if (worldExtY != 0) { yDevice = this.ldeviceOrgY + (y5 - 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(y5) { var yWorld = 0; var deviceExtY = this.ldeviceExtY; if (deviceExtY != 0) { yWorld = this.lworldOrgY + (y5 - 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 _toConsumableArray(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(_toConsumableArray, "_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, j2; 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 (j2 = i2 + 1; j2 < lNodes.length; j2++) { nodeB = lNodes[j2]; 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 distance2; 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; distance2 = Math.sqrt(distanceSquared); repulsionForce = this.repulsionConstant * nodeA.noOfChildren * nodeB.noOfChildren / distanceSquared; repulsionForceX = repulsionForce * distanceX / distance2; repulsionForceY = repulsionForce * distanceY / distance2; 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 j2 = 0; j2 < sizeY; j2++) { grid[i2][j2] = 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 j2 = startY2; j2 <= finishY; j2++) { this.grid[i2][j2].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 j2 = nodeA.startY - 1; j2 < nodeA.finishY + 2; j2++) { if (!(i2 < 0 || j2 < 0 || i2 >= grid.length || j2 >= grid[0].length)) { for (var k2 = 0; k2 < grid[i2][j2].length; k2++) { nodeB = grid[i2][j2][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(_toConsumableArray(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, size5, vNode) { LNode.call(this, gm, loc, size5, 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(list2) { var keys3 = Object.keys(this.set); var length2 = keys3.length; for (var i2 = 0; i2 < length2; i2++) { list2.push(this.set[keys3[i2]]); } }; HashSet.prototype.size = function() { return Object.keys(this.set).length; }; HashSet.prototype.addAll = function(list2) { var s2 = list2.length; for (var i2 = 0; i2 < s2; i2++) { var v3 = list2[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 q2 = this._partition(A2, p3, r2); this._quicksort(A2, p3, q2); this._quicksort(A2, q2 + 1, r2); } }, "_quicksort") }, { key: "_partition", value: /* @__PURE__ */ __name(function _partition(A2, p3, r2) { var x5 = this._get(A2, p3); var i2 = p3; var j2 = r2; while (true) { while (this.compareFunction(x5, this._get(A2, j2))) { j2--; } while (this.compareFunction(this._get(A2, i2), x5)) { i2++; } if (i2 < j2) { this._swap(A2, i2, j2); i2++; j2--; } else return j2; } }, "_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, j2) { var temp = this._get(A2, i2); this._set(A2, i2, this._get(A2, j2)); this._set(A2, j2, temp); }, "_swap") }, { key: "_defaultCompareFunction", value: /* @__PURE__ */ __name(function _defaultCompareFunction(a2, b2) { return b2 > 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 j2 = 0; j2 < this.jMax; j2++) { this.grid[i2][j2] = 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 j2 = 1; j2 < this.jMax; j2++) { this.grid[0][j2] = this.grid[0][j2 - 1] + this.gap_penalty; this.tracebackGrid[0][j2] = [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 Emitter3() { this.listeners = []; } __name(Emitter3, "Emitter"); var p3 = Emitter3.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 l2 = this.listeners[i2]; if (l2.event === event3 && l2.callback === callback) { this.listeners.splice(i2, 1); } } }; p3.emit = function(event3, data5) { for (var i2 = 0; i2 < this.listeners.length; i2++) { var l2 = this.listeners[i2]; if (event3 === l2.event) { l2.callback(data5); } } }; module3.exports = Emitter3; } /******/ ]) ); }); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/cose-base/cose-base.js var require_cose_base = __commonJS({ "../../node_modules/.pnpm/[email protected]/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, property2) { return Object.prototype.hasOwnProperty.call(object3, property2); }; __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(layout6) { LGraphManager.call(this, layout6); } __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, size5, vNode) { FDLayoutNode.call(this, gm, loc, size5, vNode); } __name(CoSENode, "CoSENode"); CoSENode.prototype = Object.create(FDLayoutNode.prototype); for (var prop in FDLayoutNode) { CoSENode[prop] = FDLayoutNode[prop]; } CoSENode.prototype.move = function() { var layout6 = this.graphManager.getLayout(); this.displacementX = layout6.coolingFactor * (this.springForceX + this.repulsionForceX + this.gravitationForceX) / this.noOfChildren; this.displacementY = layout6.coolingFactor * (this.springForceY + this.repulsionForceY + this.gravitationForceY) / this.noOfChildren; if (Math.abs(this.displacementX) > layout6.coolingFactor * layout6.maxNodeDisplacement) { this.displacementX = layout6.coolingFactor * layout6.maxNodeDisplacement * IMath.sign(this.displacementX); } if (Math.abs(this.displacementY) > layout6.coolingFactor * layout6.maxNodeDisplacement) { this.displacementY = layout6.coolingFactor * layout6.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); } layout6.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 nodes7 = this.getChild().getNodes(); var node2; for (var i2 = 0; i2 < nodes7.length; i2++) { node2 = nodes7[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 intersection3 = this.nodesWithGravity.filter(function(x5) { return allNodes.has(x5); }); this.graphManager.setAllNodesToApplyGravitation(intersection3); this.positionNodesRandomly(); } } else { if (CoSEConstants.TREE_REDUCTION_ON_INCREMENTAL) { this.reduceTrees(); this.graphManager.resetAllNodesToApplyGravitation(); var allNodes = new Set(this.getAllNodes()); var intersection3 = this.nodesWithGravity.filter(function(x5) { return allNodes.has(x5); }); this.graphManager.setAllNodesToApplyGravitation(intersection3); } } 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 intersection3 = this.nodesWithGravity.filter(function(x5) { return allNodes.has(x5); }); this.graphManager.setAllNodesToApplyGravitation(intersection3); 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 id28 = allNodes[i2].id; pData[id28] = { id: id28, 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 size5 = graphs.length; var i2; for (i2 = 0; i2 < size5; i2++) { graph = graphs[i2]; graph.updateConnected(); if (!graph.isConnected) { nodeList = nodeList.concat(graph.getNodes()); } } return nodeList; }; CoSELayout.prototype.createBendpoints = function() { var edges5 = []; edges5 = edges5.concat(this.graphManager.getAllEdges()); var visited = /* @__PURE__ */ new Set(); var i2; for (i2 = 0; i2 < edges5.length; i2++) { var edge = edges5[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 == edges5.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, distance2, 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_ = distance2 * Math.cos(teta); var y_ = distance2 * 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 edges5 = node2.getEdgesBetween(parentOfNode); while (edges5.length > 1) { var temp = edges5[0]; edges5.splice(0, 1); var index = neighborEdges.indexOf(temp); if (index >= 0) { neighborEdges.splice(index, 1); } incEdgesCount--; childCount--; } if (parentOfNode != null) { startIndex = (neighborEdges.indexOf(edges5[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, distance2 + 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(id28) { var compoundNode = self2.idToDummyNode[id28]; tiledZeroDegreePack[id28] = self2.tileNodes(self2.memberGroups[id28], compoundNode.paddingLeft + compoundNode.paddingRight); compoundNode.rect.width = tiledZeroDegreePack[id28].width; compoundNode.rect.height = tiledZeroDegreePack[id28].height; }); }; CoSELayout.prototype.repopulateCompounds = function() { for (var i2 = this.compoundOrder.length - 1; i2 >= 0; i2--) { var lCompoundNode = this.compoundOrder[i2]; var id28 = lCompoundNode.id; var horizontalMargin = lCompoundNode.paddingLeft; var verticalMargin = lCompoundNode.paddingTop; this.adjustLocations(this.tiledMemberPack[id28], lCompoundNode.rect.x, lCompoundNode.rect.y, horizontalMargin, verticalMargin); } }; CoSELayout.prototype.repopulateZeroDegreeMembers = function() { var self2 = this; var tiledPack = this.tiledZeroDegreePack; Object.keys(tiledPack).forEach(function(id28) { var compoundNode = self2.idToDummyNode[id28]; var horizontalMargin = compoundNode.paddingLeft; var verticalMargin = compoundNode.paddingTop; self2.adjustLocations(tiledPack[id28], compoundNode.rect.x, compoundNode.rect.y, horizontalMargin, verticalMargin); }); }; CoSELayout.prototype.getToBeTiled = function(node2) { var id28 = node2.id; if (this.toBeTiled[id28] != null) { return this.toBeTiled[id28]; } var childGraph = node2.getChild(); if (childGraph == null) { this.toBeTiled[id28] = 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[id28] = false; return false; } if (theChild.getChild() == null) { this.toBeTiled[theChild.id] = false; continue; } if (!this.getToBeTiled(theChild)) { this.toBeTiled[id28] = false; return false; } } this.toBeTiled[id28] = true; return true; }; CoSELayout.prototype.getNodeDegree = function(node2) { var id28 = node2.id; var edges5 = node2.getEdges(); var degree = 0; for (var i2 = 0; i2 < edges5.length; i2++) { var edge = edges5[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, y5, compoundHorizontalMargin, compoundVerticalMargin) { x5 += compoundHorizontalMargin; y5 += 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 j2 = 0; j2 < row.length; j2++) { var lnode = row[j2]; lnode.rect.x = x5; lnode.rect.y = y5; x5 += lnode.rect.width + organization.horizontalPadding; if (lnode.rect.height > maxHeight) maxHeight = lnode.rect.height; } y5 += maxHeight + organization.verticalPadding; } }; CoSELayout.prototype.tileCompoundMembers = function(childGraphMap, idToNode) { var self2 = this; this.tiledMemberPack = []; Object.keys(childGraphMap).forEach(function(id28) { var compoundNode = idToNode[id28]; self2.tiledMemberPack[id28] = self2.tileNodes(childGraphMap[id28], compoundNode.paddingLeft + compoundNode.paddingRight); compoundNode.rect.width = self2.tiledMemberPack[id28].width; compoundNode.rect.height = self2.tiledMemberPack[id28].height; }); }; CoSELayout.prototype.tileNodes = function(nodes7, 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 }; nodes7.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 < nodes7.length; i2++) { var lNode = nodes7[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 w3 = organization.rowWidth[rowIndex] + node2.rect.width; if (organization.rows[rowIndex].length > 0) { w3 += organization.horizontalPadding; } organization.rowWidth[rowIndex] = w3; if (organization.width < w3) { organization.width = w3; } var h2 = node2.rect.height; if (rowIndex > 0) h2 += organization.verticalPadding; var extraHeight = 0; if (h2 > organization.rowHeight[rowIndex]) { extraHeight = organization.rowHeight[rowIndex]; organization.rowHeight[rowIndex] = h2; extraHeight = organization.rowHeight[rowIndex] - extraHeight; } organization.height += extraHeight; organization.rows[rowIndex].push(node2); }; CoSELayout.prototype.getShortestRowIndex = function(organization) { var r2 = -1; var min9 = Number.MAX_VALUE; for (var i2 = 0; i2 < organization.rows.length; i2++) { if (organization.rowWidth[i2] < min9) { r2 = i2; min9 = 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 min9 = organization.rowWidth[sri]; if (min9 + 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 - min9 >= extraWidth + organization.horizontalPadding) { add_to_row_ratio = (organization.height + hDiff) / (min9 + 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 last3 = 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[last3] > diff2 && longest != last3) { row.splice(-1, 1); organization.rows[last3].push(node2); organization.rowWidth[longest] = organization.rowWidth[longest] - diff2; organization.rowWidth[last3] = organization.rowWidth[last3] + 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[last3]; organization.rowHeight[longest] = maxHeight; if (organization.rowHeight[last3] < node2.height + organization.verticalPadding) organization.rowHeight[last3] = node2.height + organization.verticalPadding; var finalTotal = organization.rowHeight[longest] + organization.rowHeight[last3]; 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 j2 = 0; j2 < prunedNodesInStepTemp.length; j2++) { if (prunedNodesInStepTemp[j2][0].getEdges().length == 1) { prunedNodesInStep.push(prunedNodesInStepTemp[j2]); prunedNodesInStepTemp[j2][0].getOwner().remove(prunedNodesInStepTemp[j2][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 min9 = Integer.MAX_VALUE; var minCount; var minIndex; for (var j2 = 0; j2 < controlRegions.length; j2++) { if (controlRegions[j2] < min9) { min9 = controlRegions[j2]; minCount = 1; minIndex = j2; } else if (controlRegions[j2] == min9) { minCount++; } } if (minCount == 3 && min9 == 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 && min9 == 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 && min9 == 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/[email protected][email protected]/node_modules/cytoscape-cose-bilkent/cytoscape-cose-bilkent.js var require_cytoscape_cose_bilkent = __commonJS({ "../../node_modules/.pnpm/[email protected][email protected]/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, property2) { return Object.prototype.hasOwnProperty.call(object3, property2); }; __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 defaults4 = { // 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(defaults5, options3) { var obj = {}; for (var i2 in defaults5) { obj[i2] = defaults5[i2]; } for (var i2 in options3) { obj[i2] = options3[i2]; } return obj; } __name(extend5, "extend"); ; function _CoSELayout(_options) { this.options = extend5(defaults4, _options); getUserOptions(this.options); } __name(_CoSELayout, "_CoSELayout"); var getUserOptions = /* @__PURE__ */ __name(function getUserOptions2(options3) { if (options3.nodeRepulsion != null) CoSEConstants.DEFAULT_REPULSION_STRENGTH = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH = options3.nodeRepulsion; if (options3.idealEdgeLength != null) CoSEConstants.DEFAULT_EDGE_LENGTH = FDLayoutConstants.DEFAULT_EDGE_LENGTH = options3.idealEdgeLength; if (options3.edgeElasticity != null) CoSEConstants.DEFAULT_SPRING_STRENGTH = FDLayoutConstants.DEFAULT_SPRING_STRENGTH = options3.edgeElasticity; if (options3.nestingFactor != null) CoSEConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = options3.nestingFactor; if (options3.gravity != null) CoSEConstants.DEFAULT_GRAVITY_STRENGTH = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH = options3.gravity; if (options3.numIter != null) CoSEConstants.MAX_ITERATIONS = FDLayoutConstants.MAX_ITERATIONS = options3.numIter; if (options3.gravityRange != null) CoSEConstants.DEFAULT_GRAVITY_RANGE_FACTOR = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR = options3.gravityRange; if (options3.gravityCompound != null) CoSEConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = options3.gravityCompound; if (options3.gravityRangeCompound != null) CoSEConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = options3.gravityRangeCompound; if (options3.initialEnergyOnIncremental != null) CoSEConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = options3.initialEnergyOnIncremental; if (options3.quality == "draft") LayoutConstants.QUALITY = 0; else if (options3.quality == "proof") LayoutConstants.QUALITY = 2; else LayoutConstants.QUALITY = 1; CoSEConstants.NODE_DIMENSIONS_INCLUDE_LABELS = FDLayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = options3.nodeDimensionsIncludeLabels; CoSEConstants.DEFAULT_INCREMENTAL = FDLayoutConstants.DEFAULT_INCREMENTAL = LayoutConstants.DEFAULT_INCREMENTAL = !options3.randomize; CoSEConstants.ANIMATE = FDLayoutConstants.ANIMATE = LayoutConstants.ANIMATE = options3.animate; CoSEConstants.TILE = options3.tile; CoSEConstants.TILING_PADDING_VERTICAL = typeof options3.tilingPaddingVertical === "function" ? options3.tilingPaddingVertical.call() : options3.tilingPaddingVertical; CoSEConstants.TILING_PADDING_HORIZONTAL = typeof options3.tilingPaddingHorizontal === "function" ? options3.tilingPaddingHorizontal.call() : options3.tilingPaddingHorizontal; }, "getUserOptions"); _CoSELayout.prototype.run = function() { var ready4; var frameId; var options3 = this.options; var idToLNode = this.idToLNode = {}; var layout6 = this.layout = new CoSELayout(); var self2 = this; self2.stopped = false; this.cy = this.options.cy; this.cy.trigger({ type: "layoutstart", layout: this }); var gm = layout6.newGraphManager(); this.gm = gm; var nodes7 = this.options.eles.nodes(); var edges5 = this.options.eles.edges(); this.root = gm.addRoot(); this.processChildrenList(this.root, this.getTopMostNodes(nodes7), layout6); for (var i2 = 0; i2 < edges5.length; i2++) { var edge = edges5[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(layout6.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 (options3.fit) { options3.cy.fit(options3.eles, options3.padding); } if (!ready4) { ready4 = true; self2.cy.one("layoutready", options3.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 (layout6.checkLayoutSuccess() && !layout6.isSubLayout) { layout6.doPostLayout(); } if (layout6.tilingPostLayout) { layout6.tilingPostLayout(); } layout6.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(); options3.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"); layout6.addListener("layoutstarted", function() { if (self2.options.animate === "during") { frameId = requestAnimationFrame(iterateAnimated); } }); layout6.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(nodes7) { var nodesMap2 = {}; for (var i2 = 0; i2 < nodes7.length; i2++) { nodesMap2[nodes7[i2].id()] = true; } var roots = nodes7.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, layout6) { var size5 = children2.length; for (var i2 = 0; i2 < size5; 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(layout6.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 = layout6.getGraphManager().add(layout6.newGraph(), theNode); this.processChildrenList(theNewGraph, children_of_children, layout6); } } }; _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/diagrams/mindmap/svgDraw.ts function insertPolygonShape2(parent4, w3, h2, points, node2) { return parent4.insert("polygon", ":first-child").attr( "points", points.map(function(d2) { return d2.x + "," + d2.y; }).join(" ") ).attr("transform", "translate(" + (node2.width - w3) / 2 + ", " + h2 + ")"); } var MAX_SECTIONS2, defaultBkg2, rectBkg, cloudBkg, bangBkg, circleBkg, hexagonBkg, roundedRectBkg, drawNode2, positionNode2; var init_svgDraw5 = __esm({ "src/diagrams/mindmap/svgDraw.ts"() { "use strict"; init_createText(); init_utils2(); MAX_SECTIONS2 = 12; defaultBkg2 = /* @__PURE__ */ __name(function(db9, elem, node2, section) { const rd = 5; elem.append("path").attr("id", "node-" + node2.id).attr("class", "node-bkg node-" + db9.type2Str(node2.type)).attr( "d", `M0 ${node2.height - rd} v${-node2.height + 2 * rd} q0,-5 5,-5 h${node2.width - 2 * rd} q5,0 5,5 v${node2.height - rd} H0 Z` ); elem.append("line").attr("class", "node-line-" + section).attr("x1", 0).attr("y1", node2.height).attr("x2", node2.width).attr("y2", node2.height); }, "defaultBkg"); rectBkg = /* @__PURE__ */ __name(function(db9, elem, node2) { elem.append("rect").attr("id", "node-" + node2.id).attr("class", "node-bkg node-" + db9.type2Str(node2.type)).attr("height", node2.height).attr("width", node2.width); }, "rectBkg"); cloudBkg = /* @__PURE__ */ __name(function(db9, elem, node2) { const w3 = node2.width; const h2 = node2.height; const r1 = 0.15 * w3; const r2 = 0.25 * w3; const r3 = 0.35 * w3; const r4 = 0.2 * w3; elem.append("path").attr("id", "node-" + node2.id).attr("class", "node-bkg node-" + db9.type2Str(node2.type)).attr( "d", `M0 0 a${r1},${r1} 0 0,1 ${w3 * 0.25},${-1 * w3 * 0.1} a${r3},${r3} 1 0,1 ${w3 * 0.4},${-1 * w3 * 0.1} a${r2},${r2} 1 0,1 ${w3 * 0.35},${1 * w3 * 0.2} a${r1},${r1} 1 0,1 ${w3 * 0.15},${1 * h2 * 0.35} a${r4},${r4} 1 0,1 ${-1 * w3 * 0.15},${1 * h2 * 0.65} a${r2},${r1} 1 0,1 ${-1 * w3 * 0.25},${w3 * 0.15} a${r3},${r3} 1 0,1 ${-1 * w3 * 0.5},${0} a${r1},${r1} 1 0,1 ${-1 * w3 * 0.25},${-1 * w3 * 0.15} a${r1},${r1} 1 0,1 ${-1 * w3 * 0.1},${-1 * h2 * 0.35} a${r4},${r4} 1 0,1 ${w3 * 0.1},${-1 * h2 * 0.65} H0 V0 Z` ); }, "cloudBkg"); bangBkg = /* @__PURE__ */ __name(function(db9, elem, node2) { const w3 = node2.width; const h2 = node2.height; const r2 = 0.15 * w3; elem.append("path").attr("id", "node-" + node2.id).attr("class", "node-bkg node-" + db9.type2Str(node2.type)).attr( "d", `M0 0 a${r2},${r2} 1 0,0 ${w3 * 0.25},${-1 * h2 * 0.1} a${r2},${r2} 1 0,0 ${w3 * 0.25},${0} a${r2},${r2} 1 0,0 ${w3 * 0.25},${0} a${r2},${r2} 1 0,0 ${w3 * 0.25},${1 * h2 * 0.1} a${r2},${r2} 1 0,0 ${w3 * 0.15},${1 * h2 * 0.33} a${r2 * 0.8},${r2 * 0.8} 1 0,0 ${0},${1 * h2 * 0.34} a${r2},${r2} 1 0,0 ${-1 * w3 * 0.15},${1 * h2 * 0.33} a${r2},${r2} 1 0,0 ${-1 * w3 * 0.25},${h2 * 0.15} a${r2},${r2} 1 0,0 ${-1 * w3 * 0.25},${0} a${r2},${r2} 1 0,0 ${-1 * w3 * 0.25},${0} a${r2},${r2} 1 0,0 ${-1 * w3 * 0.25},${-1 * h2 * 0.15} a${r2},${r2} 1 0,0 ${-1 * w3 * 0.1},${-1 * h2 * 0.33} a${r2 * 0.8},${r2 * 0.8} 1 0,0 ${0},${-1 * h2 * 0.34} a${r2},${r2} 1 0,0 ${w3 * 0.1},${-1 * h2 * 0.33} H0 V0 Z` ); }, "bangBkg"); circleBkg = /* @__PURE__ */ __name(function(db9, elem, node2) { elem.append("circle").attr("id", "node-" + node2.id).attr("class", "node-bkg node-" + db9.type2Str(node2.type)).attr("r", node2.width / 2); }, "circleBkg"); __name(insertPolygonShape2, "insertPolygonShape"); hexagonBkg = /* @__PURE__ */ __name(function(_db, elem, node2) { const h2 = node2.height; const f3 = 4; const m2 = h2 / f3; const w3 = node2.width - node2.padding + 2 * m2; const points = [ { x: m2, y: 0 }, { x: w3 - m2, y: 0 }, { x: w3, y: -h2 / 2 }, { x: w3 - m2, y: -h2 }, { x: m2, y: -h2 }, { x: 0, y: -h2 / 2 } ]; insertPolygonShape2(elem, w3, h2, points, node2); }, "hexagonBkg"); roundedRectBkg = /* @__PURE__ */ __name(function(db9, elem, node2) { elem.append("rect").attr("id", "node-" + node2.id).attr("class", "node-bkg node-" + db9.type2Str(node2.type)).attr("height", node2.height).attr("rx", node2.padding).attr("ry", node2.padding).attr("width", node2.width); }, "roundedRectBkg"); drawNode2 = /* @__PURE__ */ __name(async function(db9, elem, node2, fullSection, conf7) { const htmlLabels = conf7.htmlLabels; const section = fullSection % (MAX_SECTIONS2 - 1); const nodeElem = elem.append("g"); node2.section = section; let sectionClass = "section-" + section; if (section < 0) { sectionClass += " section-root"; } nodeElem.attr("class", (node2.class ? node2.class + " " : "") + "mindmap-node " + sectionClass); const bkgElem = nodeElem.append("g"); const textElem = nodeElem.append("g"); const description = node2.descr.replace(/()/g, "\n"); await createText( textElem, description, { useHtmlLabels: htmlLabels, width: node2.width, classes: "mindmap-node-label" }, conf7 ); if (!htmlLabels) { textElem.attr("dy", "1em").attr("alignment-baseline", "middle").attr("dominant-baseline", "middle").attr("text-anchor", "middle"); } const bbox = textElem.node().getBBox(); const [fontSize] = parseFontSize(conf7.fontSize); node2.height = bbox.height + fontSize * 1.1 * 0.5 + node2.padding; node2.width = bbox.width + 2 * node2.padding; if (node2.icon) { if (node2.type === db9.nodeType.CIRCLE) { node2.height += 50; node2.width += 50; const icon2 = nodeElem.append("foreignObject").attr("height", "50px").attr("width", node2.width).attr("style", "text-align: center;"); icon2.append("div").attr("class", "icon-container").append("i").attr("class", "node-icon-" + section + " " + node2.icon); textElem.attr( "transform", "translate(" + node2.width / 2 + ", " + (node2.height / 2 - 1.5 * node2.padding) + ")" ); } else { node2.width += 50; const orgHeight = node2.height; node2.height = Math.max(orgHeight, 60); const heightDiff = Math.abs(node2.height - orgHeight); const icon2 = nodeElem.append("foreignObject").attr("width", "60px").attr("height", node2.height).attr("style", "text-align: center;margin-top:" + heightDiff / 2 + "px;"); icon2.append("div").attr("class", "icon-container").append("i").attr("class", "node-icon-" + section + " " + node2.icon); textElem.attr( "transform", "translate(" + (25 + node2.width / 2) + ", " + (heightDiff / 2 + node2.padding / 2) + ")" ); } } else { if (!htmlLabels) { const dx = node2.width / 2; const dy = node2.padding / 2; textElem.attr("transform", "translate(" + dx + ", " + dy + ")"); } else { const dx = (node2.width - bbox.width) / 2; const dy = (node2.height - bbox.height) / 2; textElem.attr("transform", "translate(" + dx + ", " + dy + ")"); } } switch (node2.type) { case db9.nodeType.DEFAULT: defaultBkg2(db9, bkgElem, node2, section); break; case db9.nodeType.ROUNDED_RECT: roundedRectBkg(db9, bkgElem, node2, section); break; case db9.nodeType.RECT: rectBkg(db9, bkgElem, node2, section); break; case db9.nodeType.CIRCLE: bkgElem.attr("transform", "translate(" + node2.width / 2 + ", " + +node2.height / 2 + ")"); circleBkg(db9, bkgElem, node2, section); break; case db9.nodeType.CLOUD: cloudBkg(db9, bkgElem, node2, section); break; case db9.nodeType.BANG: bangBkg(db9, bkgElem, node2, section); break; case db9.nodeType.HEXAGON: hexagonBkg(db9, bkgElem, node2, section); break; } db9.setElementForId(node2.id, nodeElem); return node2.height; }, "drawNode"); positionNode2 = /* @__PURE__ */ __name(function(db9, node2) { const nodeElem = db9.getElementById(node2.id); const x5 = node2.x || 0; const y5 = node2.y || 0; nodeElem.attr("transform", "translate(" + x5 + "," + y5 + ")"); }, "positionNode"); } }); // src/diagrams/mindmap/mindmapRenderer.ts async function drawNodes(db9, svg, mindmap, section, conf7) { await drawNode2(db9, svg, mindmap, section, conf7); if (mindmap.children) { await Promise.all( mindmap.children.map( (child, index) => drawNodes(db9, svg, child, section < 0 ? index : section, conf7) ) ); } } function drawEdges(edgesEl, cy) { cy.edges().map((edge, id28) => { const data5 = edge.data(); if (edge[0]._private.bodyBounds) { const bounds4 = edge[0]._private.rscratch; log.trace("Edge: ", id28, data5); edgesEl.insert("path").attr( "d", `M ${bounds4.startX},${bounds4.startY} L ${bounds4.midX},${bounds4.midY} L${bounds4.endX},${bounds4.endY} ` ).attr("class", "edge section-edge-" + data5.section + " edge-depth-" + data5.depth); } }); } function addNodes(mindmap, cy, conf7, level) { cy.add({ group: "nodes", data: { id: mindmap.id.toString(), labelText: mindmap.descr, height: mindmap.height, width: mindmap.width, level, nodeId: mindmap.id, padding: mindmap.padding, type: mindmap.type }, position: { x: mindmap.x, y: mindmap.y } }); if (mindmap.children) { mindmap.children.forEach((child) => { addNodes(child, cy, conf7, level + 1); cy.add({ group: "edges", data: { id: `${mindmap.id}_${child.id}`, source: mindmap.id, target: child.id, depth: level, section: child.section } }); }); } } function layoutMindmap(node2, conf7) { return new Promise((resolve3) => { 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(node2, cy, conf7, 0); cy.nodes().forEach(function(n2) { n2.layoutDimensions = () => { const data5 = n2.data(); return { w: data5.width, h: data5.height }; }; }); cy.layout({ name: "cose-bilkent", // @ts-ignore Types for cose-bilkent are not correct? quality: "proof", styleEnabled: false, animate: false }).run(); cy.ready((e3) => { log.info("Ready", e3); resolve3(cy); }); }); } function positionNodes(db9, cy) { cy.nodes().map((node2, id28) => { const data5 = node2.data(); data5.x = node2.position().x; data5.y = node2.position().y; positionNode2(db9, data5); const el = db9.getElementById(data5.nodeId); log.info("Id:", id28, "Position: (", node2.position().x, ", ", node2.position().y, ")", data5); el.attr( "transform", `translate(${node2.position().x - data5.width / 2}, ${node2.position().y - data5.height / 2})` ); el.attr("attr", `apa-${id28})`); }); } var import_cytoscape_cose_bilkent, draw18, mindmapRenderer_default; var init_mindmapRenderer = __esm({ "src/diagrams/mindmap/mindmapRenderer.ts"() { "use strict"; init_cytoscape_esm(); import_cytoscape_cose_bilkent = __toESM(require_cytoscape_cose_bilkent(), 1); init_src32(); init_diagramAPI(); init_logger(); init_selectSvgElement(); init_setupGraphViewbox(); init_svgDraw5(); init_defaultConfig(); cytoscape2.use(import_cytoscape_cose_bilkent.default); __name(drawNodes, "drawNodes"); __name(drawEdges, "drawEdges"); __name(addNodes, "addNodes"); __name(layoutMindmap, "layoutMindmap"); __name(positionNodes, "positionNodes"); draw18 = /* @__PURE__ */ __name(async (text3, id28, _version, diagObj) => { log.debug("Rendering mindmap diagram\n" + text3); const db9 = diagObj.db; const mm = db9.getMindmap(); if (!mm) { return; } const conf7 = getConfig2(); conf7.htmlLabels = false; const svg = selectSvgElement(id28); const edgesElem = svg.append("g"); edgesElem.attr("class", "mindmap-edges"); const nodesElem = svg.append("g"); nodesElem.attr("class", "mindmap-nodes"); await drawNodes(db9, nodesElem, mm, -1, conf7); const cy = await layoutMindmap(mm, conf7); drawEdges(edgesElem, cy); positionNodes(db9, cy); setupGraphViewbox( void 0, svg, conf7.mindmap?.padding ?? defaultConfig_default.mindmap.padding, conf7.mindmap?.useMaxWidth ?? defaultConfig_default.mindmap.useMaxWidth ); }, "draw"); mindmapRenderer_default = { draw: draw18 }; } }); // src/diagrams/mindmap/styles.ts var genSections2, getStyles14, styles_default13; var init_styles13 = __esm({ "src/diagrams/mindmap/styles.ts"() { "use strict"; init_dist(); genSections2 = /* @__PURE__ */ __name((options3) => { let sections6 = ""; for (let i2 = 0; i2 < options3.THEME_COLOR_LIMIT; i2++) { options3["lineColor" + i2] = options3["lineColor" + i2] || options3["cScaleInv" + i2]; if (is_dark_default(options3["lineColor" + i2])) { options3["lineColor" + i2] = lighten_default(options3["lineColor" + i2], 20); } else { options3["lineColor" + i2] = darken_default(options3["lineColor" + i2], 20); } } for (let i2 = 0; i2 < options3.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: ${options3["cScale" + i2]}; } .section-${i2 - 1} text { fill: ${options3["cScaleLabel" + i2]}; } .node-icon-${i2 - 1} { font-size: 40px; color: ${options3["cScaleLabel" + i2]}; } .section-edge-${i2 - 1}{ stroke: ${options3["cScale" + i2]}; } .edge-depth-${i2 - 1}{ stroke-width: ${sw}; } .section-${i2 - 1} line { stroke: ${options3["cScaleInv" + i2]} ; stroke-width: 3; } .disabled, .disabled circle, .disabled text { fill: lightgray; } .disabled text { fill: #efefef; } `; } return sections6; }, "genSections"); getStyles14 = /* @__PURE__ */ __name((options3) => ` .edge { stroke-width: 3; } ${genSections2(options3)} .section-root rect, .section-root path, .section-root circle, .section-root polygon { fill: ${options3.git0}; } .section-root text { fill: ${options3.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; } `, "getStyles"); styles_default13 = getStyles14; } }); // src/diagrams/mindmap/mindmap-definition.ts var mindmap_definition_exports = {}; __export(mindmap_definition_exports, { diagram: () => diagram19 }); var diagram19; var init_mindmap_definition = __esm({ "src/diagrams/mindmap/mindmap-definition.ts"() { "use strict"; init_mindmap(); init_mindmapDb(); init_mindmapRenderer(); init_styles13(); diagram19 = { db: mindmapDb_default, renderer: mindmapRenderer_default, parser: mindmap_default, styles: styles_default13 }; } }); // src/diagrams/kanban/parser/kanban.jison var parser18, kanban_default; var init_kanban = __esm({ "src/diagrams/kanban/parser/kanban.jison"() { "use strict"; parser18 = function() { var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l2) { for (o3 = o3 || {}, l2 = k2.length; l2--; o3[k2[l2]] = 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 parser23 = { 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 parse8(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 lexer3 = 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]; } } lexer3.setInput(input, sharedState.yy); sharedState.yy.lexer = lexer3; sharedState.yy.parser = this; if (typeof lexer3.yylloc == "undefined") { lexer3.yylloc = {}; } var yyloc = lexer3.yylloc; lstack.push(yyloc); var ranges = lexer3.options && lexer3.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 lex2() { var token2; token2 = tstack.pop() || lexer3.lex() || EOF2; if (typeof token2 !== "number") { if (token2 instanceof Array) { tstack = token2; token2 = tstack.pop(); } token2 = self2.symbols_[token2] || token2; } return token2; } __name(lex2, "lex"); var symbol, preErrorSymbol, state5, action, a2, r2, yyval = {}, p3, len, newState2, expected; while (true) { state5 = stack[stack.length - 1]; if (this.defaultActions[state5]) { action = this.defaultActions[state5]; } else { if (symbol === null || typeof symbol == "undefined") { symbol = lex2(); } action = table[state5] && table[state5][symbol]; } if (typeof action === "undefined" || !action.length || !action[0]) { var errStr = ""; expected = []; for (p3 in table[state5]) { if (this.terminals_[p3] && p3 > TERROR) { expected.push("'" + this.terminals_[p3] + "'"); } } if (lexer3.showPosition) { errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer3.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: lexer3.match, token: this.terminals_[symbol] || symbol, line: lexer3.yylineno, loc: yyloc, expected }); } if (action[0] instanceof Array && action.length > 1) { throw new Error("Parse Error: multiple actions possible at state: " + state5 + ", token: " + symbol); } switch (action[0]) { case 1: stack.push(symbol); vstack.push(lexer3.yytext); lstack.push(lexer3.yylloc); stack.push(action[1]); symbol = null; if (!preErrorSymbol) { yyleng = lexer3.yyleng; yytext = lexer3.yytext; yylineno = lexer3.yylineno; yyloc = lexer3.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 lexer2 = /* @__PURE__ */ function() { var lexer3 = { 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(match2, 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 = match2[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 + match2[0].length }; this.yytext += match2[0]; this.match += match2[0]; this.matches = match2; 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(match2[0].length); this.matched += match2[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, match2, tempMatch, index; if (!this._more) { this.yytext = ""; this.match = ""; } var rules = this._currentRules(); for (var i2 = 0; i2 < rules.length; i2++) { tempMatch = this._input.match(this.rules[rules[i2]]); if (tempMatch && (!match2 || tempMatch[0].length > match2[0].length)) { match2 = tempMatch; index = i2; if (this.options.backtrack_lexer) { token2 = this.test_match(tempMatch, rules[i2]); if (token2 !== false) { return token2; } else if (this._backtrack) { match2 = false; continue; } else { return false; } } else if (!this.options.flex) { break; } } } if (match2) { token2 = this.test_match(match2, rules[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 lex2() { 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 re2 = /\n\s*/g; yy_.yytext = yy_.yytext.replace(re2, "
    "); 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 lexer3; }(); parser23.lexer = lexer2; function Parser3() { this.yy = {}; } __name(Parser3, "Parser"); Parser3.prototype = parser23; parser23.Parser = Parser3; return new Parser3(); }(); parser18.parser = parser18; kanban_default = parser18; } }); // src/diagrams/kanban/kanbanDb.ts var nodes5, sections5, cnt3, elements3, clear22, getSection, getSections5, getData4, addNode2, nodeType2, getType2, setElementForId2, decorateNode2, type2Str2, getLogger2, getElementById3, db5, kanbanDb_default; var init_kanbanDb = __esm({ "src/diagrams/kanban/kanbanDb.ts"() { "use strict"; init_diagramAPI(); init_common(); init_logger(); init_defaultConfig(); init_js_yaml(); nodes5 = []; sections5 = []; cnt3 = 0; elements3 = {}; clear22 = /* @__PURE__ */ __name(() => { nodes5 = []; sections5 = []; cnt3 = 0; elements3 = {}; }, "clear"); getSection = /* @__PURE__ */ __name((level) => { if (nodes5.length === 0) { return null; } const sectionLevel = nodes5[0].level; let lastSection = null; for (let i2 = nodes5.length - 1; i2 >= 0; i2--) { if (nodes5[i2].level === sectionLevel && !lastSection) { lastSection = nodes5[i2]; } if (nodes5[i2].level < sectionLevel) { throw new Error('Items without section detected, found section ("' + nodes5[i2].label + '")'); } } if (level === lastSection?.level) { return null; } return lastSection; }, "getSection"); getSections5 = /* @__PURE__ */ __name(function() { return sections5; }, "getSections"); getData4 = /* @__PURE__ */ __name(function() { const edges5 = []; const _nodes = []; const sections6 = getSections5(); const conf7 = getConfig2(); for (const section of sections6) { const node2 = { id: section.id, label: sanitizeText(section.label ?? "", conf7), isGroup: true, ticket: section.ticket, shape: "kanbanSection", level: section.level, look: conf7.look }; _nodes.push(node2); const children2 = nodes5.filter((n2) => n2.parentId === section.id); for (const item of children2) { const childNode = { id: item.id, parentId: section.id, label: sanitizeText(item.label ?? "", conf7), 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: edges5, other: {}, config: getConfig2() }; }, "getData"); addNode2 = /* @__PURE__ */ __name((level, id28, descr, type3, shapeData) => { const conf7 = getConfig2(); let padding2 = conf7.mindmap?.padding ?? defaultConfig_default.mindmap.padding; switch (type3) { case nodeType2.ROUNDED_RECT: case nodeType2.RECT: case nodeType2.HEXAGON: padding2 *= 2; } const node2 = { id: sanitizeText(id28, conf7) || "kbn" + cnt3++, level, label: sanitizeText(descr, conf7), width: conf7.mindmap?.maxNodeWidth ?? defaultConfig_default.mindmap.maxNodeWidth, padding: padding2, 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; } if (doc?.assigned) { node2.assigned = doc?.assigned; } if (doc?.ticket) { node2.ticket = doc?.ticket; } if (doc?.priority) { node2.priority = doc?.priority; } } const section = getSection(level); if (section) { node2.parentId = section.id || "kbn" + cnt3++; } else { sections5.push(node2); } nodes5.push(node2); }, "addNode"); nodeType2 = { DEFAULT: 0, NO_BORDER: 0, ROUNDED_RECT: 1, RECT: 2, CIRCLE: 3, CLOUD: 4, BANG: 5, HEXAGON: 6 }; getType2 = /* @__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"); setElementForId2 = /* @__PURE__ */ __name((id28, element3) => { elements3[id28] = element3; }, "setElementForId"); decorateNode2 = /* @__PURE__ */ __name((decoration) => { if (!decoration) { return; } const config6 = getConfig2(); const node2 = nodes5[nodes5.length - 1]; if (decoration.icon) { node2.icon = sanitizeText(decoration.icon, config6); } if (decoration.class) { node2.cssClasses = sanitizeText(decoration.class, config6); } }, "decorateNode"); type2Str2 = /* @__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"; default: return "no-border"; } }, "type2Str"); getLogger2 = /* @__PURE__ */ __name(() => log, "getLogger"); getElementById3 = /* @__PURE__ */ __name((id28) => elements3[id28], "getElementById"); db5 = { clear: clear22, addNode: addNode2, getSections: getSections5, getData: getData4, nodeType: nodeType2, getType: getType2, setElementForId: setElementForId2, decorateNode: decorateNode2, type2Str: type2Str2, getLogger: getLogger2, getElementById: getElementById3 }; kanbanDb_default = db5; } }); // src/diagrams/kanban/kanbanRenderer.ts var draw19, 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(); draw19 = /* @__PURE__ */ __name(async (text3, id28, _version, diagObj) => { log.debug("Rendering kanban diagram\n" + text3); const db9 = diagObj.db; const data4Layout = db9.getData(); const conf7 = getConfig2(); conf7.htmlLabels = false; const svg = selectSvgElement(id28); const sectionsElem = svg.append("g"); sectionsElem.attr("class", "sections"); const nodesElem = svg.append("g"); nodesElem.attr("class", "items"); const sections6 = data4Layout.nodes.filter( // TODO: TypeScript 5.5 will infer this predicate automatically (node2) => node2.isGroup ); let cnt5 = 0; const padding2 = 10; const sectionObjects = []; let maxLabelHeight = 25; for (const section of sections6) { const WIDTH = conf7?.kanban?.sectionWidth || 200; cnt5 = cnt5 + 1; section.x = WIDTH * cnt5 + (cnt5 - 1) * padding2 / 2; section.width = WIDTH; section.y = 0; section.height = WIDTH * 3; section.rx = 5; section.ry = 5; section.cssClasses = section.cssClasses + " section-" + cnt5; 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 = conf7?.kanban?.sectionWidth || 200; const top2 = -WIDTH * 3 / 2 + maxLabelHeight; let y5 = 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 * padding2; const nodeEl = await insertNode(nodesElem, item, { config: conf7 }); const bbox = nodeEl.node().getBBox(); item.y = y5 + bbox.height / 2; await positionNode(item); y5 = item.y + bbox.height / 2 + padding2 / 2; } const rect3 = sectionObj.cluster.select("rect"); const height2 = Math.max(y5 - top2 + 3 * padding2, 50) + (maxLabelHeight - 25); rect3.attr("height", height2); } setupGraphViewbox( void 0, svg, conf7.mindmap?.padding ?? defaultConfig_default.kanban.padding, conf7.mindmap?.useMaxWidth ?? defaultConfig_default.kanban.useMaxWidth ); }, "draw"); kanbanRenderer_default = { draw: draw19 }; } }); // src/diagrams/kanban/styles.ts var genSections3, getStyles15, styles_default14; var init_styles14 = __esm({ "src/diagrams/kanban/styles.ts"() { "use strict"; init_dist(); genSections3 = /* @__PURE__ */ __name((options3) => { let sections6 = ""; for (let i2 = 0; i2 < options3.THEME_COLOR_LIMIT; i2++) { options3["lineColor" + i2] = options3["lineColor" + i2] || options3["cScaleInv" + i2]; if (is_dark_default(options3["lineColor" + i2])) { options3["lineColor" + i2] = lighten_default(options3["lineColor" + i2], 20); } else { options3["lineColor" + i2] = darken_default(options3["lineColor" + i2], 20); } } const adjuster = /* @__PURE__ */ __name((color2, level) => options3.darkMode ? darken_default(color2, level) : lighten_default(color2, level), "adjuster"); for (let i2 = 0; i2 < options3.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(options3["cScale" + i2], 10)}; stroke: ${adjuster(options3["cScale" + i2], 10)}; } .section-${i2 - 1} text { fill: ${options3["cScaleLabel" + i2]}; } .node-icon-${i2 - 1} { font-size: 40px; color: ${options3["cScaleLabel" + i2]}; } .section-edge-${i2 - 1}{ stroke: ${options3["cScale" + i2]}; } .edge-depth-${i2 - 1}{ stroke-width: ${sw}; } .section-${i2 - 1} line { stroke: ${options3["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: ${options3.background}; stroke: ${options3.nodeBorder}; stroke-width: 1px; } .kanban-ticket-link { fill: ${options3.background}; stroke: ${options3.nodeBorder}; text-decoration: underline; } `; } return sections6; }, "genSections"); getStyles15 = /* @__PURE__ */ __name((options3) => ` .edge { stroke-width: 3; } ${genSections3(options3)} .section-root rect, .section-root path, .section-root circle, .section-root polygon { fill: ${options3.git0}; } .section-root text { fill: ${options3.gitBranchLabel0}; } .icon-container { height:100%; display: flex; justify-content: center; align-items: center; } .edge { fill: none; } .cluster-label, .label { color: ${options3.textColor}; fill: ${options3.textColor}; } .kanban-label { dy: 1em; alignment-baseline: middle; text-anchor: middle; dominant-baseline: middle; text-align: center; } `, "getStyles"); styles_default14 = getStyles15; } }); // src/diagrams/kanban/kanban-definition.ts var kanban_definition_exports = {}; __export(kanban_definition_exports, { diagram: () => diagram20 }); var diagram20; var init_kanban_definition = __esm({ "src/diagrams/kanban/kanban-definition.ts"() { "use strict"; init_kanban(); init_kanbanDb(); init_kanbanRenderer(); init_styles14(); diagram20 = { db: kanbanDb_default, renderer: kanbanRenderer_default, parser: kanban_default, styles: styles_default14 }; } }); // src/diagrams/sankey/parser/sankey.jison var parser19, sankey_default; var init_sankey = __esm({ "src/diagrams/sankey/parser/sankey.jison"() { "use strict"; parser19 = function() { var o2 = /* @__PURE__ */ __name(function(k2, v3, o3, l2) { for (o3 = o3 || {}, l2 = k2.length; l2--; o3[k2[l2]] = v3) ; return o3; }, "o"), $V0 = [1, 9], $V1 = [1, 10], $V2 = [1, 5, 10, 12]; var parser23 = { 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 parse8(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 lexer3 = 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]; } } lexer3.setInput(input, sharedState.yy); sharedState.yy.lexer = lexer3; sharedState.yy.parser = this; if (typeof lexer3.yylloc == "undefined") { lexer3.yylloc = {}; } var yyloc = lexer3.yylloc; lstack.push(yyloc); var ranges = lexer3.options && lexer3.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 lex2() { var token2; token2 = tstack.pop() || lexer3.lex() || EOF2; if (typeof token2 !== "number") { if (token2 instanceof Array) { tstack = token2; token2 = tstack.pop(); } token2 = self2.symbols_[token2] || token2; } return token2; } __name(lex2, "lex"); var symbol, preErrorSymbol, state5, action, a2, r2, yyval = {}, p3, len, newState2, expected; while (true) { state5 = stack[stack.length - 1]; if (this.defaultActions[state5]) { action = this.defaultActions[state5]; } else { if (symbol === null || typeof symbol == "undefined") { symbol = lex2(); } action = table[state5] && table[state5][symbol]; } if (typeof action === "undefined" || !action.length || !action[0]) { var errStr = ""; expected = []; for (p3 in table[state5]) { if (this.terminals_[p3] && p3 > TERROR) { expected.push("'" + this.terminals_[p3] + "'"); } } if (lexer3.showPosition) { errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer3.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: lexer3.match, token: this.terminals_[symbol] || symbol, line: lexer3.yylineno, loc: yyloc, expected }); } if (action[0] instanceof Array && action.length > 1) { throw new Error("Parse Error: multiple actions possible at state: " + state5 + ", token: " + symbol); } switch (action[0]) { case 1: stack.push(symbol); vstack.push(lexer3.yytext); lstack.push(lexer3.yylloc); stack.push(action[1]); symbol = null; if (!preErrorSymbol) { yyleng = lexer3.yyleng; yytext = lexer3.yytext; yylineno = lexer3.yylineno; yyloc = lexer3.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 lexer2 = /* @__PURE__ */ function() { var lexer3 = { 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(match2, 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 = match2[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 + match2[0].length }; this.yytext += match2[0]; this.match += match2[0]; this.matches = match2; 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(match2[0].length); this.matched += match2[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, match2, tempMatch, index; if (!this._more) { this.yytext = ""; this.match = ""; } var rules = this._currentRules(); for (var i2 = 0; i2 < rules.length; i2++) { tempMatch = this._input.match(this.rules[rules[i2]]); if (tempMatch && (!match2 || tempMatch[0].length > match2[0].length)) { match2 = tempMatch; index = i2; if (this.options.backtrack_lexer) { token2 = this.test_match(tempMatch, rules[i2]); if (token2 !== false) { return token2; } else if (this._backtrack) { match2 = false; continue; } else { return false; } } else if (!this.options.flex) { break; } } } if (match2) { token2 = this.test_match(match2, rules[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 lex2() { 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: return 10; break; case 2: return 5; break; case 3: return 12; break; case 4: this.pushState("escaped_text"); return 18; break; case 5: return 20; break; case 6: this.popState("escaped_text"); return 18; break; case 7: return 19; break; } }, "anonymous"), rules: [/^(?:sankey-beta\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": [1, 2, 3, 4, 5, 6, 7], "inclusive": false }, "escaped_text": { "rules": [6, 7], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 6, 7], "inclusive": true } } }; return lexer3; }(); parser23.lexer = lexer2; function Parser3() { this.yy = {}; } __name(Parser3, "Parser"); Parser3.prototype = parser23; parser23.Parser = Parser3; return new Parser3(); }(); parser19.parser = parser19; sankey_default = parser19; } }); // src/diagrams/sankey/sankeyDB.ts var links2, nodes6, nodesMap, clear23, SankeyLink, addLink2, 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 = []; nodes6 = []; nodesMap = /* @__PURE__ */ new Map(); clear23 = /* @__PURE__ */ __name(() => { links2 = []; nodes6 = []; 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"); } }; addLink2 = /* @__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); nodes6.push(node2); } return node2; }, "findOrCreateNode"); getNodes = /* @__PURE__ */ __name(() => nodes6, "getNodes"); getLinks2 = /* @__PURE__ */ __name(() => links2, "getLinks"); getGraph = /* @__PURE__ */ __name(() => ({ nodes: nodes6.map((node2) => ({ id: node2.ID })), links: links2.map((link3) => ({ source: link3.source.ID, target: link3.target.ID, value: link3.value })) }), "getGraph"); sankeyDB_default = { nodesMap, getConfig: /* @__PURE__ */ __name(() => getConfig2().sankey, "getConfig"), getNodes, getLinks: getLinks2, getGraph, addLink: addLink2, findOrCreateNode, getAccTitle, setAccTitle, getAccDescription, setAccDescription, getDiagramTitle, setDiagramTitle, clear: clear23 }; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-array/src/max.js function max9(values2, valueof) { let max10; if (valueof === void 0) { for (const value2 of values2) { if (value2 != null && (max10 < value2 || max10 === void 0 && value2 >= value2)) { max10 = value2; } } } else { let index = -1; for (let value2 of values2) { if ((value2 = valueof(value2, ++index, values2)) != null && (max10 < value2 || max10 === void 0 && value2 >= value2)) { max10 = value2; } } } return max10; } var init_max3 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-array/src/max.js"() { "use strict"; __name(max9, "max"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-array/src/min.js function min8(values2, valueof) { let min9; if (valueof === void 0) { for (const value2 of values2) { if (value2 != null && (min9 > value2 || min9 === void 0 && value2 >= value2)) { min9 = value2; } } } else { let index = -1; for (let value2 of values2) { if ((value2 = valueof(value2, ++index, values2)) != null && (min9 > value2 || min9 === void 0 && value2 >= value2)) { min9 = value2; } } } return min9; } var init_min3 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-array/src/min.js"() { "use strict"; __name(min8, "min"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-array/src/sum.js function sum(values2, valueof) { let sum2 = 0; if (valueof === void 0) { for (let value2 of values2) { if (value2 = +value2) { sum2 += value2; } } } else { let index = -1; for (let value2 of values2) { if (value2 = +valueof(value2, ++index, values2)) { sum2 += value2; } } } return sum2; } var init_sum = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-array/src/sum.js"() { "use strict"; __name(sum, "sum"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-array/src/index.js var init_src33 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-array/src/index.js"() { "use strict"; init_max3(); init_min3(); init_sum(); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-sankey/src/align.js function targetDepth(d2) { return d2.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 ? min8(node2.sourceLinks, targetDepth) - 1 : 0; } var init_align = __esm({ "../../node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/d3-sankey/src/constant.js function constant2(x5) { return function() { return x5; }; } var init_constant8 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-sankey/src/constant.js"() { "use strict"; __name(constant2, "constant"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-sankey/src/sankey.js function ascendingSourceBreadth(a2, b2) { return ascendingBreadth(a2.source, b2.source) || a2.index - b2.index; } function ascendingTargetBreadth(a2, b2) { return ascendingBreadth(a2.target, b2.target) || a2.index - b2.index; } function ascendingBreadth(a2, b2) { return a2.y0 - b2.y0; } function value(d2) { return d2.value; } function defaultId(d2) { return d2.index; } function defaultNodes(graph) { return graph.nodes; } function defaultLinks(graph) { return graph.links; } function find3(nodeById, id28) { const node2 = nodeById.get(id28); if (!node2) throw new Error("missing: " + id28); return node2; } function computeLinkBreadths({ nodes: nodes7 }) { for (const node2 of nodes7) { let y0 = node2.y0; let y1 = y0; for (const link3 of node2.sourceLinks) { link3.y0 = y0 + link3.width / 2; y0 += link3.width; } for (const link3 of node2.targetLinks) { link3.y1 = y1 + link3.width / 2; y1 += link3.width; } } } function Sankey() { let x0 = 0, y0 = 0, x1 = 1, y1 = 1; let dx = 24; let dy = 8, py; let id28 = defaultId; let align = justify; let sort3; let linkSort; let nodes7 = defaultNodes; let links3 = defaultLinks; let iterations = 6; function sankey() { const graph = { nodes: nodes7.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(_2) { return arguments.length ? (id28 = typeof _2 === "function" ? _2 : constant2(_2), sankey) : id28; }; sankey.nodeAlign = function(_2) { return arguments.length ? (align = typeof _2 === "function" ? _2 : constant2(_2), sankey) : align; }; sankey.nodeSort = function(_2) { return arguments.length ? (sort3 = _2, sankey) : sort3; }; sankey.nodeWidth = function(_2) { return arguments.length ? (dx = +_2, sankey) : dx; }; sankey.nodePadding = function(_2) { return arguments.length ? (dy = py = +_2, sankey) : dy; }; sankey.nodes = function(_2) { return arguments.length ? (nodes7 = typeof _2 === "function" ? _2 : constant2(_2), sankey) : nodes7; }; sankey.links = function(_2) { return arguments.length ? (links3 = typeof _2 === "function" ? _2 : constant2(_2), sankey) : links3; }; sankey.linkSort = function(_2) { return arguments.length ? (linkSort = _2, sankey) : linkSort; }; sankey.size = function(_2) { return arguments.length ? (x0 = y0 = 0, x1 = +_2[0], y1 = +_2[1], sankey) : [x1 - x0, y1 - y0]; }; sankey.extent = function(_2) { return arguments.length ? (x0 = +_2[0][0], x1 = +_2[1][0], y0 = +_2[0][1], y1 = +_2[1][1], sankey) : [[x0, y0], [x1, y1]]; }; sankey.iterations = function(_2) { return arguments.length ? (iterations = +_2, sankey) : iterations; }; function computeNodeLinks({ nodes: nodes8, links: links4 }) { for (const [i2, node2] of nodes8.entries()) { node2.index = i2; node2.sourceLinks = []; node2.targetLinks = []; } const nodeById = new Map(nodes8.map((d2, i2) => [id28(d2, i2, nodes8), d2])); for (const [i2, link3] of links4.entries()) { link3.index = i2; let { source, target } = link3; if (typeof source !== "object") source = link3.source = find3(nodeById, source); if (typeof target !== "object") target = link3.target = find3(nodeById, target); source.sourceLinks.push(link3); target.targetLinks.push(link3); } if (linkSort != null) { for (const { sourceLinks, targetLinks } of nodes8) { sourceLinks.sort(linkSort); targetLinks.sort(linkSort); } } } __name(computeNodeLinks, "computeNodeLinks"); function computeNodeValues({ nodes: nodes8 }) { for (const node2 of nodes8) { node2.value = node2.fixedValue === void 0 ? Math.max(sum(node2.sourceLinks, value), sum(node2.targetLinks, value)) : node2.fixedValue; } } __name(computeNodeValues, "computeNodeValues"); function computeNodeDepths({ nodes: nodes8 }) { const n2 = nodes8.length; let current = new Set(nodes8); 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: nodes8 }) { const n2 = nodes8.length; let current = new Set(nodes8); 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: nodes8 }) { const x5 = max9(nodes8, (d2) => d2.depth) + 1; const kx = (x1 - x0 - dx) / (x5 - 1); const columns = new Array(x5); for (const node2 of nodes8) { 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 = min8(columns, (c3) => (y1 - y0 - (c3.length - 1) * py) / sum(c3, value)); for (const nodes8 of columns) { let y5 = y0; for (const node2 of nodes8) { node2.y0 = y5; node2.y1 = y5 + node2.value * ky; y5 = node2.y1 + py; for (const link3 of node2.sourceLinks) { link3.width = link3.value * ky; } } y5 = (y1 - y5 + py) / (nodes8.length + 1); for (let i2 = 0; i2 < nodes8.length; ++i2) { const node2 = nodes8[i2]; node2.y0 += y5 * (i2 + 1); node2.y1 += y5 * (i2 + 1); } reorderLinks(nodes8); } } __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 y5 = 0; let w3 = 0; for (const { source, value: value2 } of target.targetLinks) { let v3 = value2 * (target.layer - source.layer); y5 += targetTop(source, target) * v3; w3 += v3; } if (!(w3 > 0)) continue; let dy2 = (y5 / w3 - 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 y5 = 0; let w3 = 0; for (const { target, value: value2 } of source.sourceLinks) { let v3 = value2 * (target.layer - source.layer); y5 += sourceTop(source, target) * v3; w3 += v3; } if (!(w3 > 0)) continue; let dy2 = (y5 / w3 - 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(nodes8, alpha) { const i2 = nodes8.length >> 1; const subject = nodes8[i2]; resolveCollisionsBottomToTop(nodes8, subject.y0 - py, i2 - 1, alpha); resolveCollisionsTopToBottom(nodes8, subject.y1 + py, i2 + 1, alpha); resolveCollisionsBottomToTop(nodes8, y1, nodes8.length - 1, alpha); resolveCollisionsTopToBottom(nodes8, y0, 0, alpha); } __name(resolveCollisions, "resolveCollisions"); function resolveCollisionsTopToBottom(nodes8, y5, i2, alpha) { for (; i2 < nodes8.length; ++i2) { const node2 = nodes8[i2]; const dy2 = (y5 - node2.y0) * alpha; if (dy2 > 1e-6) node2.y0 += dy2, node2.y1 += dy2; y5 = node2.y1 + py; } } __name(resolveCollisionsTopToBottom, "resolveCollisionsTopToBottom"); function resolveCollisionsBottomToTop(nodes8, y5, i2, alpha) { for (; i2 >= 0; --i2) { const node2 = nodes8[i2]; const dy2 = (node2.y1 - y5) * alpha; if (dy2 > 1e-6) node2.y0 -= dy2, node2.y1 -= dy2; y5 = 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(nodes8) { if (linkSort === void 0) { for (const { sourceLinks, targetLinks } of nodes8) { sourceLinks.sort(ascendingTargetBreadth); targetLinks.sort(ascendingSourceBreadth); } } } __name(reorderLinks, "reorderLinks"); function targetTop(source, target) { let y5 = source.y0 - (source.sourceLinks.length - 1) * py / 2; for (const { target: node2, width: width3 } of source.sourceLinks) { if (node2 === target) break; y5 += width3 + py; } for (const { source: node2, width: width3 } of target.targetLinks) { if (node2 === source) break; y5 -= width3; } return y5; } __name(targetTop, "targetTop"); function sourceTop(source, target) { let y5 = target.y0 - (target.targetLinks.length - 1) * py / 2; for (const { source: node2, width: width3 } of target.targetLinks) { if (node2 === source) break; y5 += width3 + py; } for (const { target: node2, width: width3 } of source.sourceLinks) { if (node2 === target) break; y5 -= width3; } return y5; } __name(sourceTop, "sourceTop"); return sankey; } var init_sankey2 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-sankey/src/sankey.js"() { "use strict"; init_src33(); init_align(); init_constant8(); __name(ascendingSourceBreadth, "ascendingSourceBreadth"); __name(ascendingTargetBreadth, "ascendingTargetBreadth"); __name(ascendingBreadth, "ascendingBreadth"); __name(value, "value"); __name(defaultId, "defaultId"); __name(defaultNodes, "defaultNodes"); __name(defaultLinks, "defaultLinks"); __name(find3, "find"); __name(computeLinkBreadths, "computeLinkBreadths"); __name(Sankey, "Sankey"); } }); // ../../node_modules/.pnpm/[email protected]/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_default; var init_path3 = __esm({ "../../node_modules/.pnpm/[email protected]/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, y5) { this._ += "M" + (this._x0 = this._x1 = +x5) + "," + (this._y0 = this._y1 = +y5); }, "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, y5) { this._ += "L" + (this._x1 = +x5) + "," + (this._y1 = +y5); }, "lineTo"), quadraticCurveTo: /* @__PURE__ */ __name(function(x1, y1, x5, y5) { this._ += "Q" + +x1 + "," + +y1 + "," + (this._x1 = +x5) + "," + (this._y1 = +y5); }, "quadraticCurveTo"), bezierCurveTo: /* @__PURE__ */ __name(function(x1, y1, x22, y22, x5, y5) { this._ += "C" + +x1 + "," + +y1 + "," + +x22 + "," + +y22 + "," + (this._x1 = +x5) + "," + (this._y1 = +y5); }, "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), l2 = r2 * Math.tan((pi3 - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2), t01 = l2 / l01, t21 = l2 / 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, y5, r2, a0, a1, ccw) { x5 = +x5, y5 = +y5, r2 = +r2, ccw = !!ccw; var dx = r2 * Math.cos(a0), dy = r2 * Math.sin(a0), x0 = x5 + dx, y0 = y5 + 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) + "," + (y5 - 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 = y5 + r2 * Math.sin(a1)); } }, "arc"), rect: /* @__PURE__ */ __name(function(x5, y5, w3, h2) { this._ += "M" + (this._x0 = this._x1 = +x5) + "," + (this._y0 = this._y1 = +y5) + "h" + +w3 + "v" + +h2 + "h" + -w3 + "Z"; }, "rect"), toString: /* @__PURE__ */ __name(function() { return this._; }, "toString") }; path_default = path3; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-path/src/index.js var init_src34 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-path/src/index.js"() { "use strict"; init_path3(); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-shape/src/constant.js function constant_default7(x5) { return /* @__PURE__ */ __name(function constant3() { return x5; }, "constant"); } var init_constant9 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-shape/src/constant.js"() { "use strict"; __name(constant_default7, "default"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-shape/src/point.js function x4(p3) { return p3[0]; } function y4(p3) { return p3[1]; } var init_point2 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-shape/src/point.js"() { "use strict"; __name(x4, "x"); __name(y4, "y"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-shape/src/array.js var slice3; var init_array4 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-shape/src/array.js"() { "use strict"; slice3 = Array.prototype.slice; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-shape/src/link/index.js function linkSource(d2) { return d2.source; } function linkTarget(d2) { return d2.target; } function link2(curve) { var source = linkSource, target = linkTarget, x5 = x4, y5 = y4, context = null; function link3() { var buffer, argv = slice3.call(arguments), s2 = source.apply(this, argv), t4 = target.apply(this, argv); if (!context) context = buffer = path_default(); curve(context, +x5.apply(this, (argv[0] = s2, argv)), +y5.apply(this, argv), +x5.apply(this, (argv[0] = t4, argv)), +y5.apply(this, argv)); if (buffer) return context = null, buffer + "" || null; } __name(link3, "link"); link3.source = function(_2) { return arguments.length ? (source = _2, link3) : source; }; link3.target = function(_2) { return arguments.length ? (target = _2, link3) : target; }; link3.x = function(_2) { return arguments.length ? (x5 = typeof _2 === "function" ? _2 : constant_default7(+_2), link3) : x5; }; link3.y = function(_2) { return arguments.length ? (y5 = typeof _2 === "function" ? _2 : constant_default7(+_2), link3) : y5; }; link3.context = function(_2) { return arguments.length ? (context = _2 == null ? null : _2, link3) : context; }; return link3; } 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 link2(curveHorizontal); } var init_link = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-shape/src/link/index.js"() { "use strict"; init_src34(); init_array4(); init_constant9(); init_point2(); __name(linkSource, "linkSource"); __name(linkTarget, "linkTarget"); __name(link2, "link"); __name(curveHorizontal, "curveHorizontal"); __name(linkHorizontal, "linkHorizontal"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-shape/src/index.js var init_src35 = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-shape/src/index.js"() { "use strict"; init_link(); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-sankey/src/sankeyLinkHorizontal.js function horizontalSource(d2) { return [d2.source.x1, d2.y0]; } function horizontalTarget(d2) { return [d2.target.x0, d2.y1]; } function sankeyLinkHorizontal_default() { return linkHorizontal().source(horizontalSource).target(horizontalTarget); } var init_sankeyLinkHorizontal = __esm({ "../../node_modules/.pnpm/[email protected]/node_modules/d3-sankey/src/sankeyLinkHorizontal.js"() { "use strict"; init_src35(); __name(horizontalSource, "horizontalSource"); __name(horizontalTarget, "horizontalTarget"); __name(sankeyLinkHorizontal_default, "default"); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/d3-sankey/src/index.js var init_src36 = __esm({ "../../node_modules/.pnpm/[email protected]/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(id28) { this.id = id28; this.href = `#${id28}`; } toString() { return "url(" + this.href + ")"; } }; } }); // src/diagrams/sankey/sankeyRenderer.ts var alignmentsMap, draw20, 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 }; draw20 = /* @__PURE__ */ __name(function(text3, id28, _version, diagObj) { const { securityLevel, sankey: conf7 } = getConfig2(); const defaultSankeyConfig = defaultConfig2.sankey; let sandboxElement; if (securityLevel === "sandbox") { sandboxElement = select_default2("#i" + id28); } const root4 = securityLevel === "sandbox" ? select_default2(sandboxElement.nodes()[0].contentDocument.body) : select_default2("body"); const svg = securityLevel === "sandbox" ? root4.select(`[id="${id28}"]`) : select_default2(`[id="${id28}"]`); const width3 = conf7?.width ?? defaultSankeyConfig.width; const height2 = conf7?.height ?? defaultSankeyConfig.width; const useMaxWidth = conf7?.useMaxWidth ?? defaultSankeyConfig.useMaxWidth; const nodeAlignment = conf7?.nodeAlignment ?? defaultSankeyConfig.nodeAlignment; const prefix = conf7?.prefix ?? defaultSankeyConfig.prefix; const suffix = conf7?.suffix ?? defaultSankeyConfig.suffix; const showValues = conf7?.showValues ?? defaultSankeyConfig.showValues; const graph = diagObj.db.getGraph(); const nodeAlign = alignmentsMap[nodeAlignment]; const nodeWidth = 10; const sankey = Sankey().nodeId((d2) => d2.id).nodeWidth(nodeWidth).nodePadding(10 + (showValues ? 15 : 0)).nodeAlign(nodeAlign).extent([ [0, 0], [width3, height2] ]); sankey(graph); const colorScheme = ordinal(Tableau10_default); svg.append("g").attr("class", "nodes").selectAll(".node").data(graph.nodes).join("g").attr("class", "node").attr("id", (d2) => (d2.uid = Uid.next("node-")).id).attr("transform", function(d2) { return "translate(" + d2.x0 + "," + d2.y0 + ")"; }).attr("x", (d2) => d2.x0).attr("y", (d2) => d2.y0).append("rect").attr("height", (d2) => { return d2.y1 - d2.y0; }).attr("width", (d2) => d2.x1 - d2.x0).attr("fill", (d2) => colorScheme(d2.id)); const getText = /* @__PURE__ */ __name(({ id: id29, value: value2 }) => { if (!showValues) { return id29; } return `${id29} ${prefix}${Math.round(value2 * 100) / 100}${suffix}`; }, "getText"); svg.append("g").attr("class", "node-labels").attr("font-family", "sans-serif").attr("font-size", 14).selectAll("text").data(graph.nodes).join("text").attr("x", (d2) => d2.x0 < width3 / 2 ? d2.x1 + 6 : d2.x0 - 6).attr("y", (d2) => (d2.y1 + d2.y0) / 2).attr("dy", `${showValues ? "0" : "0.35"}em`).attr("text-anchor", (d2) => d2.x0 < width3 / 2 ? "start" : "end").text(getText); const link3 = svg.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 = conf7?.linkColor ?? "gradient"; if (linkColor === "gradient") { const gradient = link3.append("linearGradient").attr("id", (d2) => (d2.uid = Uid.next("linearGradient-")).id).attr("gradientUnits", "userSpaceOnUse").attr("x1", (d2) => d2.source.x1).attr("x2", (d2) => d2.target.x0); gradient.append("stop").attr("offset", "0%").attr("stop-color", (d2) => colorScheme(d2.source.id)); gradient.append("stop").attr("offset", "100%").attr("stop-color", (d2) => colorScheme(d2.target.id)); } let coloring; switch (linkColor) { case "gradient": coloring = /* @__PURE__ */ __name((d2) => d2.uid, "coloring"); break; case "source": coloring = /* @__PURE__ */ __name((d2) => colorScheme(d2.source.id), "coloring"); break; case "target": coloring = /* @__PURE__ */ __name((d2) => colorScheme(d2.target.id), "coloring"); break; default: coloring = linkColor; } link3.append("path").attr("d", sankeyLinkHorizontal_default()).attr("stroke", coloring).attr("stroke-width", (d2) => Math.max(1, d2.width)); setupGraphViewbox(void 0, svg, 0, useMaxWidth); }, "draw"); sankeyRenderer_default = { draw: draw20 }; } }); // src/diagrams/sankey/sankeyUtils.ts var prepareTextForParsing; var init_sankeyUtils = __esm({ "src/diagrams/sankey/sankeyUtils.ts"() { "use strict"; prepareTextForParsing = /* @__PURE__ */ __name((text3) => { const textToParse = text3.replaceAll(/^[^\S\n\r]+|[^\S\n\r]+$/g, "").replaceAll(/([\n\r])+/g, "\n").trim(); return textToParse; }, "prepareTextForParsing"); } }); // src/diagrams/sankey/sankeyDiagram.ts var sankeyDiagram_exports = {}; __export(sankeyDiagram_exports, { diagram: () => diagram21 }); var originalParse, diagram21; var init_sankeyDiagram = __esm({ "src/diagrams/sankey/sankeyDiagram.ts"() { "use strict"; init_sankey(); init_sankeyDB(); init_sankeyRenderer(); init_sankeyUtils(); originalParse = sankey_default.parse.bind(sankey_default); sankey_default.parse = (text3) => originalParse(prepareTextForParsing(text3)); diagram21 = { parser: sankey_default, db: sankeyDB_default, renderer: sankeyRenderer_default }; } }); // src/diagrams/packet/db.ts var defaultPacketData, data4, DEFAULT_PACKET_CONFIG, getConfig5, getPacket, pushWord, clear24, db6; var init_db = __esm({ "src/diagrams/packet/db.ts"() { "use strict"; init_config(); init_defaultConfig(); init_utils2(); init_commonDb(); defaultPacketData = { packet: [] }; data4 = structuredClone(defaultPacketData); DEFAULT_PACKET_CONFIG = defaultConfig_default.packet; getConfig5 = /* @__PURE__ */ __name(() => { const config6 = cleanAndMerge({ ...DEFAULT_PACKET_CONFIG, ...getConfig().packet }); if (config6.showBits) { config6.paddingY += 10; } return config6; }, "getConfig"); getPacket = /* @__PURE__ */ __name(() => data4.packet, "getPacket"); pushWord = /* @__PURE__ */ __name((word) => { if (word.length > 0) { data4.packet.push(word); } }, "pushWord"); clear24 = /* @__PURE__ */ __name(() => { clear(); data4 = structuredClone(defaultPacketData); }, "clear"); db6 = { pushWord, getPacket, getConfig: getConfig5, clear: clear24, setAccTitle, getAccTitle, setDiagramTitle, getDiagramTitle, getAccDescription, setAccDescription }; } }); // src/diagrams/packet/parser.ts var maxPacketSize, populate16, getNextFittingBlock, parser20; var init_parser3 = __esm({ "src/diagrams/packet/parser.ts"() { "use strict"; init_mermaid_parser_core(); init_logger(); init_populateCommonDb(); init_db(); maxPacketSize = 1e4; populate16 = /* @__PURE__ */ __name((ast) => { populateCommonDb(ast, db6); let lastByte = -1; let word = []; let row = 1; const { bitsPerRow } = db6.getConfig(); for (let { start: start3, end: end2, label } of ast.blocks) { if (end2 && end2 < start3) { throw new Error(`Packet block ${start3} - ${end2} is invalid. End must be greater than start.`); } if (start3 !== lastByte + 1) { throw new Error( `Packet block ${start3} - ${end2 ?? start3} is not contiguous. It should start from ${lastByte + 1}.` ); } lastByte = end2 ?? start3; log.debug(`Packet block ${start3} - ${lastByte} with label ${label}`); while (word.length <= bitsPerRow + 1 && db6.getPacket().length < maxPacketSize) { const [block3, nextBlock] = getNextFittingBlock({ start: start3, end: end2, label }, row, bitsPerRow); word.push(block3); if (block3.end + 1 === row * bitsPerRow) { db6.pushWord(word); word = []; row++; } if (!nextBlock) { break; } ({ start: start3, end: end2, label } = nextBlock); } } db6.pushWord(word); }, "populate"); getNextFittingBlock = /* @__PURE__ */ __name((block3, row, bitsPerRow) => { if (block3.end === void 0) { block3.end = block3.start; } if (block3.start > block3.end) { throw new Error(`Block start ${block3.start} is greater than block end ${block3.end}.`); } if (block3.end + 1 <= row * bitsPerRow) { return [block3, void 0]; } return [ { start: block3.start, end: row * bitsPerRow - 1, label: block3.label }, { start: row * bitsPerRow, end: block3.end, label: block3.label } ]; }, "getNextFittingBlock"); parser20 = { parse: /* @__PURE__ */ __name(async (input) => { const ast = await parse2("packet", input); log.debug(ast); populate16(ast); }, "parse") }; } }); // src/diagrams/packet/renderer.ts var draw21, drawWord, renderer6; var init_renderer = __esm({ "src/diagrams/packet/renderer.ts"() { "use strict"; init_selectSvgElement(); init_setupGraphViewbox(); draw21 = /* @__PURE__ */ __name((_text, id28, _version, diagram25) => { const db9 = diagram25.db; const config6 = db9.getConfig(); const { rowHeight, paddingY, bitWidth, bitsPerRow } = config6; const words = db9.getPacket(); const title2 = db9.getDiagramTitle(); const totalRowHeight = rowHeight + paddingY; const svgHeight = totalRowHeight * (words.length + 1) - (title2 ? 0 : rowHeight); const svgWidth = bitWidth * bitsPerRow + 2; const svg = selectSvgElement(id28); svg.attr("viewbox", `0 0 ${svgWidth} ${svgHeight}`); configureSvgSize(svg, svgHeight, svgWidth, config6.useMaxWidth); for (const [word, packet2] of words.entries()) { drawWord(svg, packet2, word, config6); } svg.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((svg, word, rowNumber, { rowHeight, paddingX, paddingY, bitWidth, bitsPerRow, showBits }) => { const group2 = svg.append("g"); const wordY = rowNumber * (rowHeight + paddingY) + paddingY; for (const block3 of word) { const blockX = block3.start % bitsPerRow * bitWidth + 1; const width3 = (block3.end - block3.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(block3.label); if (!showBits) { continue; } const isSingleBlock = block3.end === block3.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(block3.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(block3.end); } } }, "drawWord"); renderer6 = { draw: draw21 }; } }); // src/diagrams/packet/styles.ts var defaultPacketStyleOptions, styles2; var init_styles15 = __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 options3 = cleanAndMerge(defaultPacketStyleOptions, packet2); return ` .packetByte { font-size: ${options3.byteFontSize}; } .packetByte.start { fill: ${options3.startByteColor}; } .packetByte.end { fill: ${options3.endByteColor}; } .packetLabel { fill: ${options3.labelColor}; font-size: ${options3.labelFontSize}; } .packetTitle { fill: ${options3.titleColor}; font-size: ${options3.titleFontSize}; } .packetBlock { stroke: ${options3.blockStrokeColor}; stroke-width: ${options3.blockStrokeWidth}; fill: ${options3.blockFillColor}; } `; }, "styles"); } }); // src/diagrams/packet/diagram.ts var diagram_exports = {}; __export(diagram_exports, { diagram: () => diagram22 }); var diagram22; var init_diagram = __esm({ "src/diagrams/packet/diagram.ts"() { "use strict"; init_db(); init_parser3(); init_renderer(); init_styles15(); diagram22 = { parser: parser20, db: db6, renderer: renderer6, styles: styles2 }; } }); // 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, l2) { for (o3 = o3 || {}, l2 = k2.length; l2--; o3[k2[l2]] = v3) ; return o3; }, "o"), $V0 = [1, 7], $V1 = [1, 13], $V2 = [1, 14], $V3 = [1, 15], $V4 = [1, 19], $V5 = [1, 16], $V6 = [1, 17], $V7 = [1, 18], $V8 = [8, 30], $V9 = [8, 21, 28, 29, 30, 31, 32, 40, 44, 47], $Va = [1, 23], $Vb = [1, 24], $Vc = [8, 15, 16, 21, 28, 29, 30, 31, 32, 40, 44, 47], $Vd = [8, 15, 16, 21, 27, 28, 29, 30, 31, 32, 40, 44, 47], $Ve = [1, 49]; var parser23 = { 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, "block": 31, "NODE_ID": 32, "nodeShapeNLabel": 33, "dirList": 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": 49, "$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: "block", 32: "NODE_ID", 35: "DIR", 36: "NODE_DSTART", 37: "NODE_DEND", 38: "BLOCK_ARROW_START", 39: "BLOCK_ARROW_END", 40: "classDef", 41: "CLASSDEF_ID", 42: "CLASSDEF_STYLEOPTS", 43: "DEFAULT", 44: "class", 45: "CLASSENTITY_IDS", 46: "STYLECLASS", 47: "style", 48: "STYLE_ENTITY_IDS", 49: "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], [34, 1], [34, 2], [33, 3], [33, 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); 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", directions: $$[$0].directions, arrowTypeEnd: edgeData2, arrowTypeStart: "arrow_open" }, { 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 id28 = yy.generateId(); this.$ = { ...$$[$0 - 2], type: "composite", children: $$[$0 - 1] }; break; case 28: yy.getLogger().debug("Rule: blockStatement : ", $$[$0 - 2], $$[$0 - 1], $$[$0]); const id29 = yy.generateId(); this.$ = { id: id29, 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] }, { 11: 3, 13: 4, 19: 5, 20: 6, 21: $V0, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 28: $V1, 29: $V2, 31: $V3, 32: $V4, 40: $V5, 44: $V6, 47: $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, 21: $V0, 28: $V1, 29: $V2, 31: $V3, 32: $V4, 40: $V5, 44: $V6, 47: $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, 32: $V4 }, { 11: 27, 13: 4, 19: 5, 20: 6, 21: $V0, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 28: $V1, 29: $V2, 31: $V3, 32: $V4, 40: $V5, 44: $V6, 47: $V7 }, { 41: [1, 28], 43: [1, 29] }, { 45: [1, 30] }, { 48: [1, 31] }, o2($Vd, [2, 29], { 33: 32, 36: [1, 33], 38: [1, 34] }), { 1: [2, 7] }, o2($V8, [2, 13]), { 26: 35, 32: $V4 }, { 32: [2, 14] }, { 17: [1, 36] }, o2($Vc, [2, 24]), { 11: 37, 13: 4, 14: 22, 15: $Va, 16: $Vb, 19: 5, 20: 6, 21: $V0, 22: 8, 23: 9, 24: 10, 25: 11, 26: 12, 28: $V1, 29: $V2, 31: $V3, 32: $V4, 40: $V5, 44: $V6, 47: $V7 }, { 30: [1, 38] }, { 42: [1, 39] }, { 42: [1, 40] }, { 46: [1, 41] }, { 49: [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]), { 37: [1, 47] }, { 34: 48, 35: $Ve }, { 15: [1, 50] }, o2($V9, [2, 27]), o2($Vd, [2, 33]), { 39: [1, 51] }, { 34: 52, 35: $Ve, 39: [2, 31] }, { 32: [2, 15] }, o2($Vd, [2, 34]), { 39: [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 parse8(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 lexer3 = 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]; } } lexer3.setInput(input, sharedState.yy); sharedState.yy.lexer = lexer3; sharedState.yy.parser = this; if (typeof lexer3.yylloc == "undefined") { lexer3.yylloc = {}; } var yyloc = lexer3.yylloc; lstack.push(yyloc); var ranges = lexer3.options && lexer3.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 lex2() { var token2; token2 = tstack.pop() || lexer3.lex() || EOF2; if (typeof token2 !== "number") { if (token2 instanceof Array) { tstack = token2; token2 = tstack.pop(); } token2 = self2.symbols_[token2] || token2; } return token2; } __name(lex2, "lex"); var symbol, preErrorSymbol, state5, action, a2, r2, yyval = {}, p3, len, newState2, expected; while (true) { state5 = stack[stack.length - 1]; if (this.defaultActions[state5]) { action = this.defaultActions[state5]; } else { if (symbol === null || typeof symbol == "undefined") { symbol = lex2(); } action = table[state5] && table[state5][symbol]; } if (typeof action === "undefined" || !action.length || !action[0]) { var errStr = ""; expected = []; for (p3 in table[state5]) { if (this.terminals_[p3] && p3 > TERROR) { expected.push("'" + this.terminals_[p3] + "'"); } } if (lexer3.showPosition) { errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer3.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: lexer3.match, token: this.terminals_[symbol] || symbol, line: lexer3.yylineno, loc: yyloc, expected }); } if (action[0] instanceof Array && action.length > 1) { throw new Error("Parse Error: multiple actions possible at state: " + state5 + ", token: " + symbol); } switch (action[0]) { case 1: stack.push(symbol); vstack.push(lexer3.yytext); lstack.push(lexer3.yylloc); stack.push(action[1]); symbol = null; if (!preErrorSymbol) { yyleng = lexer3.yyleng; yytext = lexer3.yytext; yylineno = lexer3.yylineno; yyloc = lexer3.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 lexer2 = /* @__PURE__ */ function() { var lexer3 = { 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(match2, 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 = match2[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 + match2[0].length }; this.yytext += match2[0]; this.match += match2[0]; this.matches = match2; 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(match2[0].length); this.matched += match2[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, match2, tempMatch, index; if (!this._more) { this.yytext = ""; this.match = ""; } var rules = this._currentRules(); for (var i2 = 0; i2 < rules.length; i2++) { tempMatch = this._input.match(this.rules[rules[i2]]); if (tempMatch && (!match2 || tempMatch[0].length > match2[0].length)) { match2 = tempMatch; index = i2; if (this.options.backtrack_lexer) { token2 = this.test_match(tempMatch, rules[i2]); if (token2 !== false) { return token2; } else if (this._backtrack) { match2 = false; continue; } else { return false; } } else if (!this.options.flex) { break; } } } if (match2) { token2 = this.test_match(match2, rules[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 lex2() { 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 10; break; case 1: yy.getLogger().debug("Found space-block"); return 31; break; case 2: yy.getLogger().debug("Found nl-block"); return 31; break; case 3: yy.getLogger().debug("Found space-block"); return 29; break; case 4: yy.getLogger().debug(".", yy_.yytext); break; case 5: yy.getLogger().debug("_", yy_.yytext); break; case 6: return 5; break; case 7: yy_.yytext = -1; return 28; break; case 8: yy_.yytext = yy_.yytext.replace(/columns\s+/, ""); yy.getLogger().debug("COLUMNS (LEX)", yy_.yytext); return 28; break; case 9: this.pushState("md_string"); break; case 10: return "MD_STR"; break; case 11: this.popState(); break; case 12: this.pushState("string"); break; case 13: yy.getLogger().debug("LEX: POPPING STR:", yy_.yytext); this.popState(); break; case 14: yy.getLogger().debug("LEX: STR end:", yy_.yytext); return "STR"; break; case 15: yy_.yytext = yy_.yytext.replace(/space\:/, ""); yy.getLogger().debug("SPACE NUM (LEX)", yy_.yytext); return 21; break; case 16: yy_.yytext = "1"; yy.getLogger().debug("COLUMNS (LEX)", yy_.yytext); return 21; break; case 17: return 43; break; case 18: return "LINKSTYLE"; break; case 19: return "INTERPOLATE"; break; case 20: this.pushState("CLASSDEF"); return 40; break; case 21: this.popState(); this.pushState("CLASSDEFID"); return "DEFAULT_CLASSDEF_ID"; break; case 22: this.popState(); this.pushState("CLASSDEFID"); return 41; break; case 23: this.popState(); return 42; break; case 24: this.pushState("CLASS"); return 44; break; case 25: this.popState(); this.pushState("CLASS_STYLE"); return 45; break; case 26: this.popState(); return 46; break; case 27: this.pushState("STYLE_STMNT"); return 47; break; case 28: this.popState(); this.pushState("STYLE_DEFINITION"); return 48; break; case 29: this.popState(); return 49; break; case 30: this.pushState("acc_title"); return "acc_title"; break; case 31: this.popState(); return "acc_title_value"; break; case 32: this.pushState("acc_descr"); return "acc_descr"; break; case 33: this.popState(); return "acc_descr_value"; break; case 34: this.pushState("acc_descr_multiline"); break; case 35: this.popState(); break; case 36: return "acc_descr_multiline_value"; break; case 37: return 30; 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: this.popState(); yy.getLogger().debug("Lex: ]"); return "NODE_DEND"; break; case 55: yy.getLogger().debug("Lexa: -)"); this.pushState("NODE"); return 36; break; case 56: yy.getLogger().debug("Lexa: (-"); this.pushState("NODE"); return 36; break; case 57: yy.getLogger().debug("Lexa: ))"); this.pushState("NODE"); return 36; break; case 58: yy.getLogger().debug("Lexa: )"); this.pushState("NODE"); return 36; break; case 59: yy.getLogger().debug("Lex: ((("); this.pushState("NODE"); return 36; break; case 60: yy.getLogger().debug("Lexa: )"); this.pushState("NODE"); return 36; break; case 61: yy.getLogger().debug("Lexa: )"); this.pushState("NODE"); return 36; break; case 62: yy.getLogger().debug("Lexa: )"); this.pushState("NODE"); return 36; break; case 63: yy.getLogger().debug("Lexc: >"); this.pushState("NODE"); return 36; break; case 64: yy.getLogger().debug("Lexa: (["); this.pushState("NODE"); return 36; break; case 65: yy.getLogger().debug("Lexa: )"); this.pushState("NODE"); return 36; break; case 66: this.pushState("NODE"); return 36; break; case 67: this.pushState("NODE"); return 36; break; case 68: this.pushState("NODE"); return 36; break; case 69: this.pushState("NODE"); return 36; break; case 70: this.pushState("NODE"); return 36; break; case 71: this.pushState("NODE"); return 36; break; case 72: this.pushState("NODE"); return 36; break; case 73: yy.getLogger().debug("Lexa: ["); this.pushState("NODE"); return 36; break; case 74: this.pushState("BLOCK_ARROW"); yy.getLogger().debug("LEX ARR START"); return 38; break; case 75: yy.getLogger().debug("Lex: NODE_ID", yy_.yytext); return 32; break; case 76: yy.getLogger().debug("Lex: EOF", yy_.yytext); return 8; break; case 77: this.pushState("md_string"); break; case 78: this.pushState("md_string"); break; case 79: return "NODE_DESCR"; break; case 80: this.popState(); break; case 81: yy.getLogger().debug("Lex: Starting string"); this.pushState("string"); break; case 82: yy.getLogger().debug("LEX ARR: Starting string"); this.pushState("string"); break; case 83: yy.getLogger().debug("LEX: NODE_DESCR:", yy_.yytext); return "NODE_DESCR"; break; case 84: yy.getLogger().debug("LEX POPPING"); this.popState(); break; case 85: yy.getLogger().debug("Lex: =>BAE"); this.pushState("ARROW_DIR"); break; case 86: yy_.yytext = yy_.yytext.replace(/^,\s*/, ""); yy.getLogger().debug("Lex (right): dir:", yy_.yytext); return "DIR"; break; case 87: yy_.yytext = yy_.yytext.replace(/^,\s*/, ""); yy.getLogger().debug("Lex (left):", yy_.yytext); return "DIR"; break; case 88: yy_.yytext = yy_.yytext.replace(/^,\s*/, ""); yy.getLogger().debug("Lex (x):", yy_.yytext); return "DIR"; break; case 89: yy_.yytext = yy_.yytext.replace(/^,\s*/, ""); yy.getLogger().debug("Lex (y):", yy_.yytext); return "DIR"; break; case 90: yy_.yytext = yy_.yytext.replace(/^,\s*/, ""); yy.getLogger().debug("Lex (up):", yy_.yytext); return "DIR"; break; case 91: yy_.yytext = yy_.yytext.replace(/^,\s*/, ""); yy.getLogger().debug("Lex (down):", yy_.yytext); return "DIR"; break; case 92: yy_.yytext = "]>"; yy.getLogger().debug("Lex (ARROW_DIR end):", yy_.yytext); this.popState(); this.popState(); return "BLOCK_ARROW_END"; 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: LINK", yy_.yytext); return 15; 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: yy.getLogger().debug("Lex: START_LINK", yy_.yytext); this.pushState("LLABEL"); return 16; break; case 100: this.pushState("md_string"); break; case 101: yy.getLogger().debug("Lex: Starting string"); this.pushState("string"); return "LINK_LABEL"; 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: this.popState(); yy.getLogger().debug("Lex: LINK", yy_.yytext); return 15; break; case 105: yy.getLogger().debug("Lex: COLON", yy_.yytext); yy_.yytext = yy_.yytext.slice(1); return 27; break; } }, "anonymous"), rules: [/^(?:block-beta\b)/, /^(?:block\s+)/, /^(?:block\n+)/, /^(?:block:)/, /^(?:[\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": [29], "inclusive": false }, "STYLE_STMNT": { "rules": [28], "inclusive": false }, "CLASSDEFID": { "rules": [23], "inclusive": false }, "CLASSDEF": { "rules": [21, 22], "inclusive": false }, "CLASS_STYLE": { "rules": [26], "inclusive": false }, "CLASS": { "rules": [25], "inclusive": false }, "LLABEL": { "rules": [100, 101, 102, 103, 104], "inclusive": false }, "ARROW_DIR": { "rules": [86, 87, 88, 89, 90, 91, 92], "inclusive": false }, "BLOCK_ARROW": { "rules": [77, 82, 85], "inclusive": false }, "NODE": { "rules": [38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 78, 81], "inclusive": false }, "md_string": { "rules": [10, 11, 79, 80], "inclusive": false }, "space": { "rules": [], "inclusive": false }, "string": { "rules": [13, 14, 83, 84], "inclusive": false }, "acc_descr_multiline": { "rules": [35, 36], "inclusive": false }, "acc_descr": { "rules": [33], "inclusive": false }, "acc_title": { "rules": [31], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 15, 16, 17, 18, 19, 20, 24, 27, 30, 32, 34, 37, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 93, 94, 95, 96, 97, 98, 99, 105], "inclusive": true } } }; return lexer3; }(); parser23.lexer = lexer2; function Parser3() { this.yy = {}; } __name(Parser3, "Parser"); Parser3.prototype = parser23; parser23.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) { switch (typeStr.trim()) { case "--x": return "arrow_cross"; case "--o": return "arrow_circle"; default: return "arrow_point"; } } var blockDatabase, edgeList, edgeCount2, COLOR_KEYWORD2, FILL_KEYWORD2, BG_FILL2, STYLECLASS_SEP2, config5, classes5, sanitizeText6, addStyleClass2, addStyle2Node, setCssClass3, populateBlockDatabase, blocks, rootBlock, clear25, cnt4, generateId3, setHierarchy, getColumns, getBlocksFlat, getBlocks, getEdges2, getBlock, setBlock, getLogger3, getClasses7, db7, blockDB_default; var init_blockDB = __esm({ "src/diagrams/block/blockDB.ts"() { "use strict"; init_clone2(); init_config(); init_diagramAPI(); init_logger(); init_common(); init_commonDb(); blockDatabase = /* @__PURE__ */ new Map(); edgeList = []; edgeCount2 = /* @__PURE__ */ new Map(); COLOR_KEYWORD2 = "color"; FILL_KEYWORD2 = "fill"; BG_FILL2 = "bgFill"; STYLECLASS_SEP2 = ","; config5 = getConfig2(); classes5 = /* @__PURE__ */ new Map(); sanitizeText6 = /* @__PURE__ */ __name((txt) => common_default.sanitizeText(txt, config5), "sanitizeText"); addStyleClass2 = /* @__PURE__ */ __name(function(id28, styleAttributes = "") { let foundClass = classes5.get(id28); if (!foundClass) { foundClass = { id: id28, styles: [], textStyles: [] }; classes5.set(id28, foundClass); } if (styleAttributes !== void 0 && styleAttributes !== null) { styleAttributes.split(STYLECLASS_SEP2).forEach((attrib) => { const fixedAttrib = attrib.replace(/([^;]*);/, "$1").trim(); if (RegExp(COLOR_KEYWORD2).exec(attrib)) { const newStyle1 = fixedAttrib.replace(FILL_KEYWORD2, BG_FILL2); const newStyle2 = newStyle1.replace(COLOR_KEYWORD2, FILL_KEYWORD2); foundClass.textStyles.push(newStyle2); } foundClass.styles.push(fixedAttrib); }); } }, "addStyleClass"); addStyle2Node = /* @__PURE__ */ __name(function(id28, styles3 = "") { const foundBlock = blockDatabase.get(id28); if (styles3 !== void 0 && styles3 !== null) { foundBlock.styles = styles3.split(STYLECLASS_SEP2); } }, "addStyle2Node"); setCssClass3 = /* @__PURE__ */ __name(function(itemIds, cssClassName) { itemIds.split(",").forEach(function(id28) { let foundBlock = blockDatabase.get(id28); if (foundBlock === void 0) { const trimmedId = id28.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 = []; for (const block3 of blockList) { if (block3.label) { block3.label = sanitizeText6(block3.label); } if (block3.type === "classDef") { addStyleClass2(block3.id, block3.css); continue; } if (block3.type === "applyClass") { setCssClass3(block3.id, block3?.styleClass ?? ""); continue; } if (block3.type === "applyStyles") { if (block3?.stylesStr) { addStyle2Node(block3.id, block3?.stylesStr); } continue; } if (block3.type === "column-setting") { parent4.columns = block3.columns ?? -1; } else if (block3.type === "edge") { const count = (edgeCount2.get(block3.id) ?? 0) + 1; edgeCount2.set(block3.id, count); block3.id = count + "-" + block3.id; edgeList.push(block3); } else { if (!block3.label) { if (block3.type === "composite") { block3.label = ""; } else { block3.label = block3.id; } } const existingBlock = blockDatabase.get(block3.id); if (existingBlock === void 0) { blockDatabase.set(block3.id, block3); } else { if (block3.type !== "na") { existingBlock.type = block3.type; } if (block3.label !== block3.id) { existingBlock.label = block3.label; } } if (block3.children) { populateBlockDatabase(block3.children, block3); } if (block3.type === "space") { const w3 = block3.width ?? 1; for (let j2 = 0; j2 < w3; j2++) { const newBlock = clone_default2(block3); newBlock.id = newBlock.id + "-" + j2; blockDatabase.set(newBlock.id, newBlock); children2.push(newBlock); } } else if (existingBlock === void 0) { children2.push(block3); } } } parent4.children = children2; }, "populateBlockDatabase"); blocks = []; rootBlock = { id: "root", type: "composite", children: [], columns: -1 }; clear25 = /* @__PURE__ */ __name(() => { log.debug("Clear called"); clear(); rootBlock = { id: "root", type: "composite", children: [], columns: -1 }; blockDatabase = /* @__PURE__ */ new Map([["root", rootBlock]]); blocks = []; classes5 = /* @__PURE__ */ new Map(); edgeList = []; edgeCount2 = /* @__PURE__ */ new Map(); }, "clear"); __name(typeStr2Type, "typeStr2Type"); __name(edgeTypeStr2Type, "edgeTypeStr2Type"); __name(edgeStrToEdgeData, "edgeStrToEdgeData"); cnt4 = 0; generateId3 = /* @__PURE__ */ __name(() => { cnt4++; return "id-" + Math.random().toString(36).substr(2, 12) + "-" + cnt4; }, "generateId"); setHierarchy = /* @__PURE__ */ __name((block3) => { rootBlock.children = block3; populateBlockDatabase(block3, rootBlock); blocks = rootBlock.children; }, "setHierarchy"); getColumns = /* @__PURE__ */ __name((blockId) => { const block3 = blockDatabase.get(blockId); if (!block3) { return -1; } if (block3.columns) { return block3.columns; } if (!block3.children) { return -1; } return block3.children.length; }, "getColumns"); getBlocksFlat = /* @__PURE__ */ __name(() => { return [...blockDatabase.values()]; }, "getBlocksFlat"); getBlocks = /* @__PURE__ */ __name(() => { return blocks || []; }, "getBlocks"); getEdges2 = /* @__PURE__ */ __name(() => { return edgeList; }, "getEdges"); getBlock = /* @__PURE__ */ __name((id28) => { return blockDatabase.get(id28); }, "getBlock"); setBlock = /* @__PURE__ */ __name((block3) => { blockDatabase.set(block3.id, block3); }, "setBlock"); getLogger3 = /* @__PURE__ */ __name(() => console, "getLogger"); getClasses7 = /* @__PURE__ */ __name(function() { return classes5; }, "getClasses"); db7 = { getConfig: /* @__PURE__ */ __name(() => getConfig().block, "getConfig"), typeStr2Type, edgeTypeStr2Type, edgeStrToEdgeData, getLogger: getLogger3, getBlocksFlat, getBlocks, getEdges: getEdges2, setHierarchy, getBlock, setBlock, getColumns, getClasses: getClasses7, clear: clear25, generateId: generateId3 }; blockDB_default = db7; } }); // src/diagrams/block/styles.ts var fade2, getStyles16, styles_default15; var init_styles16 = __esm({ "src/diagrams/block/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 b2 = channel2(color2, "b"); return rgba_default(r2, g2, b2, opacity); }, "fade"); getStyles16 = /* @__PURE__ */ __name((options3) => `.label { font-family: ${options3.fontFamily}; color: ${options3.nodeTextColor || options3.textColor}; } .cluster-label text { fill: ${options3.titleColor}; } .cluster-label span,p { color: ${options3.titleColor}; } .label text,span,p { fill: ${options3.nodeTextColor || options3.textColor}; color: ${options3.nodeTextColor || options3.textColor}; } .node rect, .node circle, .node ellipse, .node polygon, .node path { fill: ${options3.mainBkg}; stroke: ${options3.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: ${options3.arrowheadColor}; } .edgePath .path { stroke: ${options3.lineColor}; stroke-width: 2.0px; } .flowchart-link { stroke: ${options3.lineColor}; fill: none; } .edgeLabel { background-color: ${options3.edgeLabelBackground}; rect { opacity: 0.5; background-color: ${options3.edgeLabelBackground}; fill: ${options3.edgeLabelBackground}; } text-align: center; } /* For html labels only */ .labelBkg { background-color: ${fade2(options3.edgeLabelBackground, 0.5)}; // background-color: } .node .cluster { // fill: ${fade2(options3.mainBkg, 0.5)}; fill: ${fade2(options3.clusterBkg, 0.5)}; stroke: ${fade2(options3.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: ${options3.titleColor}; } .cluster span,p { color: ${options3.titleColor}; } /* .cluster div { color: ${options3.titleColor}; } */ div.mermaidTooltip { position: absolute; text-align: center; max-width: 200px; padding: 2px; font-family: ${options3.fontFamily}; font-size: 12px; background: ${options3.tertiaryColor}; border: 1px solid ${options3.border2}; border-radius: 2px; pointer-events: none; z-index: 100; } .flowchartTitleText { text-anchor: middle; font-size: 18px; fill: ${options3.textColor}; } `, "getStyles"); styles_default15 = getStyles16; } }); // src/dagre-wrapper/markers.js var insertMarkers4, 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(); insertMarkers4 = /* @__PURE__ */ __name((elem, markerArray, type3, id28) => { markerArray.forEach((markerName) => { markers2[markerName](elem, type3, id28); }); }, "insertMarkers"); extension4 = /* @__PURE__ */ __name((elem, type3, id28) => { log.trace("Making markers for ", id28); elem.append("defs").append("marker").attr("id", id28 + "_" + 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", id28 + "_" + 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, id28) => { elem.append("defs").append("marker").attr("id", id28 + "_" + 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", id28 + "_" + 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, id28) => { elem.append("defs").append("marker").attr("id", id28 + "_" + 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", id28 + "_" + 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, id28) => { elem.append("defs").append("marker").attr("id", id28 + "_" + 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", id28 + "_" + 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, id28) => { elem.append("defs").append("marker").attr("id", id28 + "_" + 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", id28 + "_" + 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, id28) => { elem.append("marker").attr("id", id28 + "_" + 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", id28 + "_" + 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, id28) => { elem.append("marker").attr("id", id28 + "_" + 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", id28 + "_" + 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, id28) => { elem.append("marker").attr("id", id28 + "_" + 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", id28 + "_" + 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, id28) => { elem.append("defs").append("marker").attr("id", id28 + "_" + 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 = insertMarkers4; } }); // 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(block3, db9, siblingWidth = 0, siblingHeight = 0) { log.debug( "setBlockSizes abc95 (start)", block3.id, block3?.size?.x, "block width =", block3?.size, "sieblingWidth", siblingWidth ); if (!block3?.size?.width) { block3.size = { width: siblingWidth, height: siblingHeight, x: 0, y: 0 }; } let maxWidth = 0; let maxHeight = 0; if (block3.children?.length > 0) { for (const child of block3.children) { setBlockSizes(child, db9); } const childSize = getMaxChildSize(block3); maxWidth = childSize.width; maxHeight = childSize.height; log.debug("setBlockSizes abc95 maxWidth of", block3.id, ":s children is ", maxWidth, maxHeight); for (const child of block3.children) { if (child.size) { log.debug( `abc95 Setting size of children of ${block3.id} id=${child.id} ${maxWidth} ${maxHeight} ${JSON.stringify(child.size)}` ); child.size.width = maxWidth * (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 ${block3.id} children child:${child.id} maxWidth:${maxWidth} maxHeight:${maxHeight}` ); } } for (const child of block3.children) { setBlockSizes(child, db9, maxWidth, maxHeight); } const columns = block3.columns ?? -1; let numItems = 0; for (const child of block3.children) { numItems += child.widthInColumns ?? 1; } let xSize = block3.children.length; if (columns > 0 && columns < numItems) { xSize = columns; } const ySize = Math.ceil(numItems / xSize); let width3 = xSize * (maxWidth + padding) + padding; let height2 = ySize * (maxHeight + padding) + padding; if (width3 < siblingWidth) { log.debug( `Detected to small siebling: abc95 ${block3.id} sieblingWidth ${siblingWidth} sieblingHeight ${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", block3.id, "childWidth", childWidth, "maxWidth", maxWidth); log.debug("Size indata abc88", block3.id, "childHeight", childHeight, "maxHeight", maxHeight); log.debug("Size indata abc88 xSize", xSize, "padding", padding); for (const child of block3.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) ${block3.id} xSize ${xSize} ySize ${ySize} columns ${columns}${block3.children.length} width=${Math.max(width3, block3.size?.width || 0)}` ); if (width3 < (block3?.size?.width || 0)) { width3 = block3?.size?.width || 0; const num = columns > 0 ? Math.min(block3.children.length, columns) : block3.children.length; if (num > 0) { const childWidth = (width3 - num * padding - padding) / num; log.debug("abc95 (growing to fit) width", block3.id, width3, block3.size?.width, childWidth); for (const child of block3.children) { if (child.size) { child.size.width = childWidth; } } } } block3.size = { width: width3, height: height2, x: 0, y: 0 }; } log.debug( "setBlockSizes abc94 (done)", block3.id, block3?.size?.x, block3?.size?.width, block3?.size?.y, block3?.size?.height ); } function layoutBlocks(block3, db9) { log.debug( `abc85 layout blocks (=>layoutBlocks) ${block3.id} x: ${block3?.size?.x} y: ${block3?.size?.y} width: ${block3?.size?.width}` ); const columns = block3.columns ?? -1; log.debug("layoutBlocks columns abc95", block3.id, "=>", columns, block3); if (block3.children && // find max width of children block3.children.length > 0) { const width3 = block3?.children[0]?.size?.width ?? 0; const widthOfChildren = block3.children.length * width3 + (block3.children.length - 1) * padding; log.debug("widthOfChildren 88", widthOfChildren, "posX"); let columnPos = 0; log.debug("abc91 block?.size?.x", block3.id, block3?.size?.x); let startingPosX = block3?.size?.x ? block3?.size?.x + (-block3?.size?.width / 2 || 0) : -padding; let rowPos = 0; for (const child of block3.children) { const parent4 = block3; if (!child.size) { continue; } const { width: width4, height: height2 } = child.size; const { px, py } = calculateBlockPosition(columns, columnPos); if (py != rowPos) { rowPos = py; startingPosX = block3?.size?.x ? block3?.size?.x + (-block3?.size?.width / 2 || 0) : -padding; log.debug("New row in layout for block", block3.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; child.size.y = parent4.size.y - parent4.size.height / 2 + py * (height2 + padding) + height2 / 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, db9); } columnPos += child?.widthInColumns ?? 1; log.debug("abc88 columnsPos", child, columnPos); } } log.debug( `layout blocks (<==layoutBlocks) ${block3.id} x: ${block3?.size?.x} y: ${block3?.size?.y} width: ${block3?.size?.width}` ); } function findBounds(block3, { minX, minY, maxX, maxY } = { minX: 0, minY: 0, maxX: 0, maxY: 0 }) { if (block3.size && block3.id !== "root") { const { x: x5, y: y5, width: width3, height: height2 } = block3.size; if (x5 - width3 / 2 < minX) { minX = x5 - width3 / 2; } if (y5 - height2 / 2 < minY) { minY = y5 - height2 / 2; } if (x5 + width3 / 2 > maxX) { maxX = x5 + width3 / 2; } if (y5 + height2 / 2 > maxY) { maxY = y5 + height2 / 2; } } if (block3.children) { for (const child of block3.children) { ({ minX, minY, maxX, maxY } = findBounds(child, { minX, minY, maxX, maxY })); } } return { minX, minY, maxX, maxY }; } function layout5(db9) { const root4 = db9.getBlock("root"); if (!root4) { return; } setBlockSizes(root4, db9, 0, 0); layoutBlocks(root4, db9); 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 padding, getMaxChildSize; var init_layout2 = __esm({ "src/diagrams/block/layout.ts"() { "use strict"; init_logger(); init_diagramAPI(); padding = getConfig2()?.block?.padding ?? 8; __name(calculateBlockPosition, "calculateBlockPosition"); getMaxChildSize = /* @__PURE__ */ __name((block3) => { let maxWidth = 0; let maxHeight = 0; for (const child of block3.children) { const { width: width3, height: height2, x: x5, y: y5 } = child.size ?? { width: 0, height: 0, x: 0, y: 0 }; log.debug( "getMaxChildSize abc95 child:", child.id, "width:", width3, "height:", height2, "x:", x5, "y:", y5, child.type ); if (child.type === "space") { continue; } if (width3 > maxWidth) { maxWidth = width3 / (block3.widthInColumns ?? 1); } if (height2 > maxHeight) { maxHeight = height2; } } return { width: maxWidth, height: maxHeight }; }, "getMaxChildSize"); __name(setBlockSizes, "setBlockSizes"); __name(layoutBlocks, "layoutBlocks"); __name(findBounds, "findBounds"); __name(layout5, "layout"); } }); // src/dagre-wrapper/createLabel.js function applyStyle3(dom, styleFn) { if (styleFn) { dom.attr("style", styleFn); } } function addHtmlLabel2(node2) { const fo = select_default2(document.createElementNS("http://www.w3.org/2000/svg", "foreignObject")); const div = fo.append("xhtml:div"); const label = node2.label; const labelClass = node2.isNode ? "nodeLabel" : "edgeLabel"; const span = div.append("span"); span.html(label); applyStyle3(span, node2.labelStyle); span.attr("class", labelClass); applyStyle3(div, node2.labelStyle); div.style("display", "inline-block"); div.style("white-space", "nowrap"); div.attr("xmlns", "http://www.w3.org/1999/xhtml"); return fo.node(); } var createLabel2, createLabel_default2; var init_createLabel2 = __esm({ "src/dagre-wrapper/createLabel.js"() { "use strict"; init_src32(); init_logger(); init_diagramAPI(); init_common(); init_utils2(); init_createText(); __name(applyStyle3, "applyStyle"); __name(addHtmlLabel2, "addHtmlLabel"); createLabel2 = /* @__PURE__ */ __name((_vertexText, style3, isTitle, isNode2) => { let vertexText = _vertexText || ""; if (typeof vertexText === "object") { vertexText = vertexText[0]; } if (evaluate(getConfig2().flowchart.htmlLabels)) { vertexText = vertexText.replace(/\\n|\n/g, "
    "); log.debug("vertexText" + vertexText); const node2 = { isNode: isNode2, label: replaceIconSubstring(decodeEntities(vertexText)), labelStyle: style3.replace("fill:", "color:") }; let vertexNode = addHtmlLabel2(node2); return vertexNode; } else { const svgLabel = document.createElementNS("http://www.w3.org/2000/svg", "text"); svgLabel.setAttribute("style", style3.replace("color:", "fill:")); let rows = []; if (typeof vertexText === "string") { rows = vertexText.split(/\\n|\n|/gi); } else if (Array.isArray(vertexText)) { rows = vertexText; } else { rows = []; } for (const row of rows) { 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"); if (isTitle) { tspan.setAttribute("class", "title-row"); } else { tspan.setAttribute("class", "row"); } tspan.textContent = row.trim(); svgLabel.appendChild(tspan); } return svgLabel; } }, "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, id28, diagramType) => { if (edge.arrowTypeStart) { addEdgeMarker2(svgPath, "start", edge.arrowTypeStart, url, id28, diagramType); } if (edge.arrowTypeEnd) { addEdgeMarker2(svgPath, "end", edge.arrowTypeEnd, url, id28, 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, id28, 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}#${id28}_${diagramType}-${endMarkerType}${suffix})`); }, "addEdgeMarker"); } }); // src/dagre-wrapper/edges.js function setTerminalWidth2(fo, value2) { if (getConfig2().flowchart.htmlLabels && fo) { fo.style.width = value2.length * 9 + "px"; fo.style.height = "12px"; } } var edgeLabels2, terminalLabels2, insertEdgeLabel2, positionEdgeLabel2, outsideNode2, intersection2, cutPathAtIntersect2, insertEdge2; var init_edges2 = __esm({ "src/dagre-wrapper/edges.js"() { "use strict"; init_logger(); init_createLabel2(); init_createText(); init_src32(); init_diagramAPI(); init_utils2(); init_common(); init_lineWithOffset(); init_subGraphTitleMargins(); init_edgeMarker2(); edgeLabels2 = {}; terminalLabels2 = {}; insertEdgeLabel2 = /* @__PURE__ */ __name((elem, edge) => { const config6 = getConfig2(); const useHtmlLabels = evaluate(config6.flowchart.htmlLabels); const labelElement = edge.labelType === "markdown" ? createText( elem, edge.label, { style: edge.labelStyle, useHtmlLabels, addSvgBackground: true }, config6 ) : createLabel_default2(edge.label, edge.labelStyle); const edgeLabel = elem.insert("g").attr("class", "edgeLabel"); const label = edgeLabel.insert("g").attr("class", "label"); label.node().appendChild(labelElement); let bbox = labelElement.getBBox(); if (useHtmlLabels) { const div = labelElement.children[0]; const dv = select_default2(labelElement); bbox = div.getBoundingClientRect(); dv.attr("width", bbox.width); dv.attr("height", bbox.height); } label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")"); edgeLabels2[edge.id] = edgeLabel; edge.width = bbox.width; edge.height = bbox.height; let fo; if (edge.startLabelLeft) { const startLabelElement = createLabel_default2(edge.startLabelLeft, edge.labelStyle); const startEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); const inner2 = startEdgeLabelLeft.insert("g").attr("class", "inner"); fo = inner2.node().appendChild(startLabelElement); const slBox = startLabelElement.getBBox(); inner2.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); if (!terminalLabels2[edge.id]) { terminalLabels2[edge.id] = {}; } terminalLabels2[edge.id].startLeft = startEdgeLabelLeft; setTerminalWidth2(fo, edge.startLabelLeft); } if (edge.startLabelRight) { const startLabelElement = createLabel_default2(edge.startLabelRight, edge.labelStyle); const startEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); const inner2 = startEdgeLabelRight.insert("g").attr("class", "inner"); fo = startEdgeLabelRight.node().appendChild(startLabelElement); inner2.node().appendChild(startLabelElement); const slBox = startLabelElement.getBBox(); inner2.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); if (!terminalLabels2[edge.id]) { terminalLabels2[edge.id] = {}; } terminalLabels2[edge.id].startRight = startEdgeLabelRight; setTerminalWidth2(fo, edge.startLabelRight); } if (edge.endLabelLeft) { const endLabelElement = createLabel_default2(edge.endLabelLeft, edge.labelStyle); const endEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals"); const inner2 = endEdgeLabelLeft.insert("g").attr("class", "inner"); fo = inner2.node().appendChild(endLabelElement); const slBox = endLabelElement.getBBox(); inner2.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); endEdgeLabelLeft.node().appendChild(endLabelElement); if (!terminalLabels2[edge.id]) { terminalLabels2[edge.id] = {}; } terminalLabels2[edge.id].endLeft = endEdgeLabelLeft; setTerminalWidth2(fo, edge.endLabelLeft); } if (edge.endLabelRight) { const endLabelElement = createLabel_default2(edge.endLabelRight, edge.labelStyle); const endEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals"); const inner2 = endEdgeLabelRight.insert("g").attr("class", "inner"); fo = inner2.node().appendChild(endLabelElement); const slBox = endLabelElement.getBBox(); inner2.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")"); endEdgeLabelRight.node().appendChild(endLabelElement); if (!terminalLabels2[edge.id]) { terminalLabels2[edge.id] = {}; } terminalLabels2[edge.id].endRight = endEdgeLabelRight; setTerminalWidth2(fo, edge.endLabelRight); } return labelElement; }, "insertEdgeLabel"); __name(setTerminalWidth2, "setTerminalWidth"); positionEdgeLabel2 = /* @__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 y5 = edge.y; if (path4) { const pos = utils_default2.calcLabelPosition(path4); log.debug( "Moving label " + edge.label + " from (", x5, ",", y5, ") to (", pos.x, ",", pos.y, ") abc88" ); if (paths.updatedPath) { x5 = pos.x; y5 = pos.y; } } el.attr("transform", `translate(${x5}, ${y5 + subGraphTitleTotalMargin / 2})`); } if (edge.startLabelLeft) { const el = terminalLabels2[edge.id].startLeft; let x5 = edge.x; let y5 = edge.y; if (path4) { const pos = utils_default2.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, "start_left", path4); x5 = pos.x; y5 = pos.y; } el.attr("transform", `translate(${x5}, ${y5})`); } if (edge.startLabelRight) { const el = terminalLabels2[edge.id].startRight; let x5 = edge.x; let y5 = edge.y; if (path4) { const pos = utils_default2.calcTerminalLabelPosition( edge.arrowTypeStart ? 10 : 0, "start_right", path4 ); x5 = pos.x; y5 = pos.y; } el.attr("transform", `translate(${x5}, ${y5})`); } if (edge.endLabelLeft) { const el = terminalLabels2[edge.id].endLeft; let x5 = edge.x; let y5 = edge.y; if (path4) { const pos = utils_default2.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_left", path4); x5 = pos.x; y5 = pos.y; } el.attr("transform", `translate(${x5}, ${y5})`); } if (edge.endLabelRight) { const el = terminalLabels2[edge.id].endRight; let x5 = edge.x; let y5 = edge.y; if (path4) { const pos = utils_default2.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_right", path4); x5 = pos.x; y5 = pos.y; } el.attr("transform", `translate(${x5}, ${y5})`); } }, "positionEdgeLabel"); outsideNode2 = /* @__PURE__ */ __name((node2, point8) => { const x5 = node2.x; const y5 = node2.y; const dx = Math.abs(point8.x - x5); const dy = Math.abs(point8.y - y5); const w3 = node2.width / 2; const h2 = node2.height / 2; if (dx >= w3 || dy >= h2) { return true; } return false; }, "outsideNode"); intersection2 = /* @__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 y5 = node2.y; const dx = Math.abs(x5 - insidePoint.x); const w3 = node2.width / 2; let r2 = insidePoint.x < outsidePoint.x ? w3 - dx : w3 + dx; const h2 = node2.height / 2; const Q2 = Math.abs(outsidePoint.y - insidePoint.y); const R2 = Math.abs(outsidePoint.x - insidePoint.x); if (Math.abs(y5 - outsidePoint.y) * w3 > Math.abs(x5 - outsidePoint.x) * h2) { let q2 = insidePoint.y < outsidePoint.y ? outsidePoint.y - h2 - y5 : y5 - h2 - outsidePoint.y; r2 = R2 * q2 / Q2; const res = { x: insidePoint.x < outsidePoint.x ? insidePoint.x + r2 : insidePoint.x - R2 + r2, y: insidePoint.y < outsidePoint.y ? insidePoint.y + Q2 - q2 : insidePoint.y - Q2 + q2 }; if (r2 === 0) { res.x = outsidePoint.x; res.y = outsidePoint.y; } if (R2 === 0) { res.x = outsidePoint.x; } if (Q2 === 0) { res.y = outsidePoint.y; } log.debug(`abc89 topp/bott calc, Q ${Q2}, q ${q2}, R ${R2}, r ${r2}`, res); return res; } else { if (insidePoint.x < outsidePoint.x) { r2 = outsidePoint.x - w3 - x5; } else { r2 = x5 - w3 - outsidePoint.x; } let q2 = Q2 * r2 / R2; let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R2 - r2 : insidePoint.x - R2 + r2; let _y = insidePoint.y < outsidePoint.y ? insidePoint.y + q2 : insidePoint.y - q2; log.debug(`sides calc abc89, Q ${Q2}, q ${q2}, R ${R2}, r ${r2}`, { _x, _y }); if (r2 === 0) { _x = outsidePoint.x; _y = outsidePoint.y; } if (R2 === 0) { _x = outsidePoint.x; } if (Q2 === 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 = intersection2(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, id28) { 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: y5 } = getLineFunctionsWithOffset(edge); const lineFunction = line_default().x(x5).y(y5).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 = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search; url = url.replace(/\(/g, "\\("); url = url.replace(/\)/g, "\\)"); } addEdgeMarkers2(svgPath, edge, url, id28, 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 direction4 of directions) { switch (direction4) { case "x": uniqueDirections.add("right"); uniqueDirections.add("left"); break; case "y": uniqueDirections.add("up"); uniqueDirections.add("down"); break; default: uniqueDirections.add(direction4); break; } } return uniqueDirections; }, "expandAndDeduplicateDirections"); getArrowPoints = /* @__PURE__ */ __name((duplicatedDirections, bbox, node2) => { const directions = expandAndDeduplicateDirections(duplicatedDirections); const f3 = 2; const height2 = bbox.height + 2 * node2.padding; const midpoint3 = height2 / f3; const width3 = bbox.width + 2 * midpoint3 + node2.padding; const padding2 = 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 * padding2 }, { x: width3 - midpoint3, y: 0 }, { x: width3, y: 0 }, // Right { x: width3, y: -height2 / 3 }, { x: width3 + 2 * padding2, 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 * padding2 }, { x: midpoint3, y: -height2 }, // Left { x: 0, y: -height2 }, { x: 0, y: -2 * height2 / 3 }, { x: -2 * padding2, 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: -padding2 }, { x: width3 - midpoint3, y: -padding2 }, { x: width3 - midpoint3, y: 0 }, { x: width3, y: -height2 / 2 }, { x: width3 - midpoint3, y: -height2 }, { x: width3 - midpoint3, y: -height2 + padding2 }, { x: midpoint3, y: -height2 + padding2 }, { 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 pont of bottom arrow { x: 0, y: -padding2 }, { x: midpoint3, y: -padding2 }, // Left top over vertical section { x: midpoint3, y: -height2 + padding2 }, { x: 0, y: -height2 + padding2 }, // Top of arrow { x: width3 / 2, y: -height2 }, { x: width3, y: -height2 + padding2 }, // Top of right vertical bar { x: width3 - midpoint3, y: -height2 + padding2 }, { x: width3 - midpoint3, y: -padding2 }, { x: width3, y: -padding2 } ]; } 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: -padding2 }, { x: midpoint3, y: -padding2 }, { x: width3 - midpoint3, y: -padding2 }, { x: width3 - midpoint3, y: 0 }, { x: width3, y: -height2 / 2 }, { x: width3 - midpoint3, y: -height2 }, { x: width3 - midpoint3, y: -height2 + padding2 }, // top left corner of arrow { x: midpoint3, y: -height2 + padding2 }, { x: midpoint3, y: -height2 + padding2 } ]; } if (directions.has("left")) { return [ { x: midpoint3, y: 0 }, { x: midpoint3, y: -padding2 }, // Two points, the right corners { x: width3 - midpoint3, y: -padding2 }, { x: width3 - midpoint3, y: -height2 + padding2 }, { x: midpoint3, y: -height2 + padding2 }, { x: midpoint3, y: -height2 }, { x: 0, y: -height2 / 2 } ]; } if (directions.has("up")) { return [ // Bottom center { x: midpoint3, y: -padding2 }, // Left top over vertical section { x: midpoint3, y: -height2 + padding2 }, { x: 0, y: -height2 + padding2 }, // Top of arrow { x: width3 / 2, y: -height2 }, { x: width3, y: -height2 + padding2 }, // Top of right vertical bar { x: width3 - midpoint3, y: -height2 + padding2 }, { x: width3 - midpoint3, y: -padding2 } ]; } if (directions.has("down")) { return [ // Bottom center { x: width3 / 2, y: 0 }, // Left pont of bottom arrow { x: 0, y: -padding2 }, { x: midpoint3, y: -padding2 }, // Left top over vertical section { x: midpoint3, y: -height2 + padding2 }, { x: width3 - midpoint3, y: -height2 + padding2 }, { x: width3 - midpoint3, y: -padding2 }, { x: width3, y: -padding2 } ]; } 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, q2) { var a1, a2, b1, b2, c1, c22; var r1, r2, r3, r4; var denom, offset, num; var x5, y5; 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 * q2.x + b1 * q2.y + c1; if (r3 !== 0 && r4 !== 0 && sameSign2(r3, r4)) { return; } a2 = q2.y - q1.y; b2 = q1.x - q2.x; c22 = q2.x * q1.y - q1.x * q2.y; r1 = a2 * p1.x + b2 * p1.y + c22; r2 = a2 * p22.x + b2 * p22.y + c22; if (r1 !== 0 && r2 !== 0 && sameSign2(r1, r2)) { return; } denom = a1 * b2 - a2 * b1; if (denom === 0) { return; } offset = Math.abs(denom / 2); num = b1 * c22 - b2 * c1; x5 = num < 0 ? (num - offset) / denom : (num + offset) / denom; num = a2 * c1 - a1 * c22; y5 = num < 0 ? (num - offset) / denom : (num + offset) / denom; return { x: x5, y: y5 }; } 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, q2) { var pdx = p3.x - point8.x; var pdy = p3.y - point8.y; var distp = Math.sqrt(pdx * pdx + pdy * pdy); var qdx = q2.x - point8.x; var qdy = q2.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 y5 = node2.y; var dx = point8.x - x5; var dy = point8.y - y5; var w3 = node2.width / 2; var h2 = node2.height / 2; var sx, sy; if (Math.abs(dy) * w3 > Math.abs(dx) * h2) { if (dy < 0) { h2 = -h2; } sx = dy === 0 ? 0 : h2 * dx / dy; sy = h2; } else { if (dx < 0) { w3 = -w3; } sx = w3; sy = dx === 0 ? 0 : w3 * dy / dx; } return { x: x5 + sx, y: y5 + 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 insertPolygonShape3(parent4, w3, h2, points) { return parent4.insert("polygon", ":first-child").attr( "points", points.map(function(d2) { return d2.x + "," + d2.y; }).join(" ") ).attr("class", "label-container").attr("transform", "translate(" + -w3 / 2 + "," + h2 / 2 + ")"); } var labelHelper2, updateNodeBounds2; var init_util4 = __esm({ "src/dagre-wrapper/shapes/util.js"() { "use strict"; init_createLabel2(); init_createText(); init_diagramAPI(); init_src32(); init_common(); init_utils2(); labelHelper2 = /* @__PURE__ */ __name(async (parent4, node2, _classes, isNode2) => { const config6 = getConfig2(); let classes6; const useHtmlLabels = node2.useHtmlLabels || evaluate(config6.flowchart.htmlLabels); if (!_classes) { classes6 = "node default"; } else { classes6 = _classes; } const shapeSvg = parent4.insert("g").attr("class", classes6).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]; } const textNode = label.node(); let text3; if (node2.labelType === "markdown") { text3 = createText( label, sanitizeText(decodeEntities(labelText), config6), { useHtmlLabels, width: node2.width || config6.flowchart.wrappingWidth, classes: "markdown-node-label" }, config6 ); } else { text3 = textNode.appendChild( createLabel_default2(sanitizeText(decodeEntities(labelText), config6), node2.labelStyle, false, isNode2) ); } let bbox = text3.getBBox(); const halfPadding = node2.padding / 2; if (evaluate(config6.flowchart.htmlLabels)) { const div = text3.children[0]; const dv = select_default2(text3); const images = div.getElementsByTagName("img"); if (images) { const noImgText = labelText.replace(/]*>/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 = config6.fontSize ? config6.fontSize : 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); } 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(insertPolygonShape3, "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_intersect2(); note2 = /* @__PURE__ */ __name(async (parent4, node2) => { const useHtmlLabels = node2.useHtmlLabels || getConfig2().flowchart.htmlLabels; 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, positionNode3; var init_nodes3 = __esm({ "src/dagre-wrapper/nodes.js"() { "use strict"; init_src32(); init_diagramAPI(); init_common(); 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 w3 = bbox.width + node2.padding; const h2 = bbox.height + node2.padding; const s2 = w3 + h2; 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 = insertPolygonShape3(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(d2) { return d2.x + "," + d2.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 f3 = 4; const h2 = bbox.height + node2.padding; const m2 = h2 / f3; const w3 = bbox.width + 2 * m2 + node2.padding; const points = [ { x: m2, y: 0 }, { x: w3 - m2, y: 0 }, { x: w3, y: -h2 / 2 }, { x: w3 - m2, y: -h2 }, { x: m2, y: -h2 }, { x: 0, y: -h2 / 2 } ]; const hex2 = insertPolygonShape3(shapeSvg, w3, h2, 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 f3 = 2; const h2 = bbox.height + 2 * node2.padding; const m2 = h2 / f3; const w3 = bbox.width + 2 * m2 + node2.padding; const points = getArrowPoints(node2.directions, bbox, node2); const blockArrow = insertPolygonShape3(shapeSvg, w3, h2, 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 w3 = bbox.width + node2.padding; const h2 = bbox.height + node2.padding; const points = [ { x: -h2 / 2, y: 0 }, { x: w3, y: 0 }, { x: w3, y: -h2 }, { x: -h2 / 2, y: -h2 }, { x: 0, y: -h2 / 2 } ]; const el = insertPolygonShape3(shapeSvg, w3, h2, points); el.attr("style", node2.style); node2.width = w3 + h2; node2.height = h2; 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 w3 = bbox.width + node2.padding; const h2 = bbox.height + node2.padding; const points = [ { x: -2 * h2 / 6, y: 0 }, { x: w3 - h2 / 6, y: 0 }, { x: w3 + 2 * h2 / 6, y: -h2 }, { x: h2 / 6, y: -h2 } ]; const el = insertPolygonShape3(shapeSvg, w3, h2, 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 w3 = bbox.width + node2.padding; const h2 = bbox.height + node2.padding; const points = [ { x: 2 * h2 / 6, y: 0 }, { x: w3 + h2 / 6, y: 0 }, { x: w3 - 2 * h2 / 6, y: -h2 }, { x: -h2 / 6, y: -h2 } ]; const el = insertPolygonShape3(shapeSvg, w3, h2, 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 w3 = bbox.width + node2.padding; const h2 = bbox.height + node2.padding; const points = [ { x: -2 * h2 / 6, y: 0 }, { x: w3 + 2 * h2 / 6, y: 0 }, { x: w3 - h2 / 6, y: -h2 }, { x: h2 / 6, y: -h2 } ]; const el = insertPolygonShape3(shapeSvg, w3, h2, 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 w3 = bbox.width + node2.padding; const h2 = bbox.height + node2.padding; const points = [ { x: h2 / 6, y: 0 }, { x: w3 - h2 / 6, y: 0 }, { x: w3 + 2 * h2 / 6, y: -h2 }, { x: -2 * h2 / 6, y: -h2 } ]; const el = insertPolygonShape3(shapeSvg, w3, h2, 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 w3 = bbox.width + node2.padding; const h2 = bbox.height + node2.padding; const points = [ { x: 0, y: 0 }, { x: w3 + h2 / 2, y: 0 }, { x: w3, y: -h2 / 2 }, { x: w3 + h2 / 2, y: -h2 }, { x: 0, y: -h2 } ]; const el = insertPolygonShape3(shapeSvg, w3, h2, 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 w3 = bbox.width + node2.padding; const rx = w3 / 2; const ry = rx / (2.5 + w3 / 50); const h2 = bbox.height + ry + node2.padding; const shape = "M 0," + ry + " a " + rx + "," + ry + " 0,0,0 " + w3 + " 0 a " + rx + "," + ry + " 0,0,0 " + -w3 + " 0 l 0," + h2 + " a " + rx + "," + ry + " 0,0,0 " + w3 + " 0 l 0," + -h2; const el = shapeSvg.attr("label-offset-y", ry).insert("path", ":first-child").attr("style", node2.style).attr("d", shape).attr("transform", "translate(" + -w3 / 2 + "," + -(h2 / 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 y5 = ry * ry * (1 - x5 * x5 / (rx * rx)); if (y5 != 0) { y5 = Math.sqrt(y5); } y5 = ry - y5; if (point8.y - node2.y > 0) { y5 = -y5; } pos.y += y5; } 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 y5 = 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", y5).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 y5 = 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", y5).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((parent4, node2) => { let classes6; if (!node2.classes) { classes6 = "node default"; } else { classes6 = "node " + node2.classes; } const shapeSvg = parent4.insert("g").attr("class", classes6).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 text3 = label.node().appendChild(createLabel_default2(title2, node2.labelStyle, true, true)); let bbox = { width: 0, height: 0 }; if (evaluate(getConfig2().flowchart.htmlLabels)) { const div = text3.children[0]; const dv = select_default2(text3); 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 = text3.getBBox(); const descr = label.node().appendChild( createLabel_default2(textRows.join ? textRows.join("
    ") : textRows, node2.labelStyle, true, true) ); if (evaluate(getConfig2().flowchart.htmlLabels)) { 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(text3).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 h2 = bbox.height + node2.padding; const w3 = bbox.width + h2 / 4 + node2.padding; const rect3 = shapeSvg.insert("rect", ":first-child").attr("style", node2.style).attr("rx", h2 / 2).attr("ry", h2 / 2).attr("x", -w3 / 2).attr("y", -h2 / 2).attr("width", w3).attr("height", h2); 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 w3 = bbox.width + node2.padding; const h2 = bbox.height + node2.padding; const points = [ { x: 0, y: 0 }, { x: w3, y: 0 }, { x: w3, y: -h2 }, { x: 0, y: -h2 }, { x: 0, y: 0 }, { x: -8, y: 0 }, { x: w3 + 8, y: 0 }, { x: w3 + 8, y: -h2 }, { x: -8, y: -h2 }, { x: -8, y: 0 } ]; const el = insertPolygonShape3(shapeSvg, w3, h2, 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((parent4, node2) => { const halfPadding = node2.padding / 2; const rowPadding = 4; const lineHeight = 8; let classes6; if (!node2.classes) { classes6 = "node default"; } else { classes6 = "node " + node2.classes; } const shapeSvg = parent4.insert("g").attr("class", classes6).attr("id", node2.domId || node2.id); const rect3 = shapeSvg.insert("rect", ":first-child"); const topLine = shapeSvg.insert("line"); const bottomLine = shapeSvg.insert("line"); let maxWidth = 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 = labelContainer.node().appendChild(createLabel_default2(interfaceLabelText, node2.labelStyle, true, true)); let interfaceBBox = interfaceLabel.getBBox(); if (evaluate(getConfig2().flowchart.htmlLabels)) { 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; maxWidth += interfaceBBox.width; } let classTitleString = node2.classData.label; if (node2.classData.type !== void 0 && node2.classData.type !== "") { if (getConfig2().flowchart.htmlLabels) { classTitleString += "<" + node2.classData.type + ">"; } else { classTitleString += "<" + node2.classData.type + ">"; } } const classTitleLabel = labelContainer.node().appendChild(createLabel_default2(classTitleString, node2.labelStyle, true, true)); select_default2(classTitleLabel).attr("class", "classTitle"); let classTitleBBox = classTitleLabel.getBBox(); if (evaluate(getConfig2().flowchart.htmlLabels)) { 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 > maxWidth) { maxWidth = classTitleBBox.width; } const classAttributes = []; node2.classData.members.forEach((member) => { const parsedInfo = member.getDisplayDetails(); let parsedText = parsedInfo.displayText; if (getConfig2().flowchart.htmlLabels) { parsedText = parsedText.replace(//g, ">"); } const lbl = labelContainer.node().appendChild( createLabel_default2( parsedText, parsedInfo.cssStyle ? parsedInfo.cssStyle : node2.labelStyle, true, true ) ); let bbox = lbl.getBBox(); if (evaluate(getConfig2().flowchart.htmlLabels)) { 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 > maxWidth) { maxWidth = bbox.width; } maxHeight += bbox.height + rowPadding; classAttributes.push(lbl); }); maxHeight += lineHeight; const classMethods = []; node2.classData.methods.forEach((member) => { const parsedInfo = member.getDisplayDetails(); let displayText = parsedInfo.displayText; if (getConfig2().flowchart.htmlLabels) { displayText = displayText.replace(//g, ">"); } const lbl = labelContainer.node().appendChild( createLabel_default2( displayText, parsedInfo.cssStyle ? parsedInfo.cssStyle : node2.labelStyle, true, true ) ); let bbox = lbl.getBBox(); if (evaluate(getConfig2().flowchart.htmlLabels)) { 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 > maxWidth) { maxWidth = bbox.width; } maxHeight += bbox.height + rowPadding; classMethods.push(lbl); }); maxHeight += lineHeight; if (hasInterface) { let diffX2 = (maxWidth - interfaceBBox.width) / 2; select_default2(interfaceLabel).attr( "transform", "translate( " + (-1 * maxWidth / 2 + diffX2) + ", " + -1 * maxHeight / 2 + ")" ); verticalPos = interfaceBBox.height + rowPadding; } let diffX = (maxWidth - classTitleBBox.width) / 2; select_default2(classTitleLabel).attr( "transform", "translate( " + (-1 * maxWidth / 2 + diffX) + ", " + (-1 * maxHeight / 2 + verticalPos) + ")" ); verticalPos += classTitleBBox.height + rowPadding; topLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 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( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos + lineHeight / 2) + ")" ); const memberBBox = lbl?.getBBox(); verticalPos += (memberBBox?.height ?? 0) + rowPadding; }); verticalPos += lineHeight; bottomLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 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( " + -maxWidth / 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", -maxWidth / 2 - halfPadding).attr("y", -(maxHeight / 2) - halfPadding).attr("width", maxWidth + 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"); positionNode3 = /* @__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 padding2 = 8; const diff2 = node2.diff || 0; if (node2.clusterNode) { el.attr( "transform", "translate(" + (node2.x + diff2 - node2.width / 2) + ", " + (node2.y - node2.height / 2 - padding2) + ")" ); } else { el.attr("transform", "translate(" + node2.x + ", " + node2.y + ")"); } return diff2; }, "positionNode"); } }); // src/diagrams/block/renderHelpers.ts function getNodeFromBlock(block3, db9, positioned = false) { const vertex = block3; let classStr = "default"; if ((vertex?.classes?.length || 0) > 0) { classStr = (vertex?.classes ?? []).join(" "); } classStr = classStr + " flowchart-label"; let radius2 = 0; let shape = ""; let padding2; switch (vertex.type) { case "round": radius2 = 5; shape = "rect"; break; case "composite": radius2 = 0; shape = "composite"; padding2 = 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 styles3 = getStylesFromArray(vertex?.styles ?? []); const vertexText = vertex.label; const bounds4 = vertex.size ?? { width: 0, height: 0, x: 0, y: 0 }; const node2 = { labelStyle: styles3.labelStyle, shape, labelText: vertexText, rx: radius2, ry: radius2, class: classStr, style: styles3.style, 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: padding2 ?? getConfig()?.block?.padding ?? 0 }; return node2; } async function calculateBlockSize(elem, block3, db9) { const node2 = getNodeFromBlock(block3, db9, false); if (node2.type === "group") { return; } const config6 = getConfig(); const nodeEl = await insertNode2(elem, node2, { config: config6 }); const boundingBox3 = nodeEl.node().getBBox(); const obj = db9.getBlock(node2.id); obj.size = { width: boundingBox3.width, height: boundingBox3.height, x: 0, y: 0, node: nodeEl }; db9.setBlock(obj); nodeEl.remove(); } async function insertBlockPositioned(elem, block3, db9) { const node2 = getNodeFromBlock(block3, db9, true); const obj = db9.getBlock(node2.id); if (obj.type !== "space") { const config6 = getConfig(); await insertNode2(elem, node2, { config: config6 }); block3.intersect = node2?.intersect; positionNode3(node2); } } async function performOperations(elem, blocks2, db9, operation) { for (const block3 of blocks2) { await operation(elem, block3, db9); if (block3.children) { await performOperations(elem, block3.children, db9, operation); } } } async function calculateBlockSizes(elem, blocks2, db9) { await performOperations(elem, blocks2, db9, calculateBlockSize); } async function insertBlocks(elem, blocks2, db9) { await performOperations(elem, blocks2, db9, insertBlockPositioned); } async function insertEdges(elem, edges5, blocks2, db9, id28) { const g2 = new Graph({ multigraph: true, compound: true }); g2.setGraph({ rankdir: "TB", nodesep: 10, ranksep: 10, marginx: 8, marginy: 8 }); for (const block3 of blocks2) { if (block3.size) { g2.setNode(block3.id, { width: block3.size.width, height: block3.size.height, intersect: block3.intersect }); } } for (const edge of edges5) { if (edge.start && edge.end) { const startBlock = db9.getBlock(edge.start); const endBlock = db9.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 } ]; insertEdge2( elem, { v: edge.start, w: edge.end, name: edge.id }, { ...edge, arrowTypeEnd: edge.arrowTypeEnd, arrowTypeStart: edge.arrowTypeStart, points, classes: "edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1" }, void 0, "block", g2, id28 ); 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: "edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1" }); positionEdgeLabel2( { ...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 getClasses8, draw22, blockRenderer_default; var init_blockRenderer = __esm({ "src/diagrams/block/blockRenderer.ts"() { "use strict"; init_src32(); init_config(); init_markers2(); init_logger(); init_setupGraphViewbox(); init_layout2(); init_renderHelpers(); getClasses8 = /* @__PURE__ */ __name(function(text3, diagObj) { return diagObj.db.getClasses(); }, "getClasses"); draw22 = /* @__PURE__ */ __name(async function(text3, id28, _version, diagObj) { const { securityLevel, block: conf7 } = getConfig(); const db9 = diagObj.db; let sandboxElement; if (securityLevel === "sandbox") { sandboxElement = select_default2("#i" + id28); } const root4 = securityLevel === "sandbox" ? select_default2(sandboxElement.nodes()[0].contentDocument.body) : select_default2("body"); const svg = securityLevel === "sandbox" ? root4.select(`[id="${id28}"]`) : select_default2(`[id="${id28}"]`); const markers3 = ["point", "circle", "cross"]; markers_default2(svg, markers3, diagObj.type, id28); const bl = db9.getBlocks(); const blArr = db9.getBlocksFlat(); const edges5 = db9.getEdges(); const nodes7 = svg.insert("g").attr("class", "block"); await calculateBlockSizes(nodes7, bl, db9); const bounds4 = layout5(db9); await insertBlocks(nodes7, bl, db9); await insertEdges(nodes7, edges5, blArr, db9, id28); 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 } = conf7; configureSvgSize(svg, height2, width3, !!useMaxWidth); log.debug("Here Bounds", bounds4, bounds22); svg.attr( "viewBox", `${bounds22.x - 5} ${bounds22.y - 5} ${bounds22.width + 10} ${bounds22.height + 10}` ); } }, "draw"); blockRenderer_default = { draw: draw22, getClasses: getClasses8 }; } }); // src/diagrams/block/blockDiagram.ts var blockDiagram_exports = {}; __export(blockDiagram_exports, { diagram: () => diagram23 }); var diagram23; var init_blockDiagram = __esm({ "src/diagrams/block/blockDiagram.ts"() { "use strict"; init_block(); init_blockDB(); init_styles16(); init_blockRenderer(); diagram23 = { parser: block_default, db: blockDB_default, renderer: blockRenderer_default, styles: styles_default15 }; } }); // src/diagrams/architecture/architectureTypes.ts var ArchitectureDirectionName, ArchitectureDirectionArrow, ArchitectureDirectionArrowShift, getOppositeArchitectureDirection, isArchitectureDirection, isArchitectureDirectionX, isArchitectureDirectionY, isArchitectureDirectionXY, isArchitecturePairXY, isValidArchitectureDirectionPair, getArchitectureDirectionPair, shiftPositionByArchitectureDirectionPair, getArchitectureDirectionXYFactors, isArchitectureService, isArchitectureJunction, 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((scale) => `${scale},${scale / 2} 0,${scale} 0,0`, "L"), R: /* @__PURE__ */ __name((scale) => `0,${scale / 2} ${scale},0 ${scale},${scale}`, "R"), T: /* @__PURE__ */ __name((scale) => `0,0 ${scale},0 ${scale / 2},${scale}`, "T"), B: /* @__PURE__ */ __name((scale) => `${scale / 2},0 ${scale},${scale} 0,${scale}`, "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, b2) { const aX_bY = isArchitectureDirectionX(a2) && isArchitectureDirectionY(b2); const aY_bX = isArchitectureDirectionY(a2) && isArchitectureDirectionX(b2); 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, y5], pair) { const lhs = pair[0]; const rhs = pair[1]; if (isArchitectureDirectionX(lhs)) { if (isArchitectureDirectionY(rhs)) { return [x5 + (lhs === "L" ? -1 : 1), y5 + (rhs === "T" ? 1 : -1)]; } else { return [x5 + (lhs === "L" ? -1 : 1), y5]; } } else { if (isArchitectureDirectionX(rhs)) { return [x5 + (rhs === "L" ? 1 : -1), y5 + (lhs === "T" ? 1 : -1)]; } else { return [x5, y5 + (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"); 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"); edgeData = /* @__PURE__ */ __name((edge) => { return edge.data(); }, "edgeData"); nodeData = /* @__PURE__ */ __name((node2) => { return node2.data(); }, "nodeData"); } }); // src/diagrams/architecture/architectureDb.ts function getConfigField(field) { const arch = getConfig2().architecture; if (arch?.[field]) { return arch[field]; } return DEFAULT_ARCHITECTURE_CONFIG[field]; } var DEFAULT_ARCHITECTURE_CONFIG, state4, clear26, addService, getServices, addJunction, getJunctions, getNodes2, getNode, addGroup, getGroups, addEdge, getEdges3, getDataStructures, setElementForId3, getElementById4, db8; var init_architectureDb = __esm({ "src/diagrams/architecture/architectureDb.ts"() { "use strict"; init_defaultConfig(); init_diagramAPI(); init_imperativeState(); init_commonDb(); init_architectureTypes(); DEFAULT_ARCHITECTURE_CONFIG = defaultConfig_default.architecture; state4 = new ImperativeState(() => ({ nodes: {}, groups: {}, edges: [], registeredIds: {}, config: DEFAULT_ARCHITECTURE_CONFIG, dataStructures: void 0, elements: {} })); clear26 = /* @__PURE__ */ __name(() => { state4.reset(); clear(); }, "clear"); addService = /* @__PURE__ */ __name(function({ id: id28, icon: icon2, in: parent4, title: title2, iconText }) { if (state4.records.registeredIds[id28] !== void 0) { throw new Error( `The service id [${id28}] is already in use by another ${state4.records.registeredIds[id28]}` ); } if (parent4 !== void 0) { if (id28 === parent4) { throw new Error(`The service [${id28}] cannot be placed within itself`); } if (state4.records.registeredIds[parent4] === void 0) { throw new Error( `The service [${id28}]'s parent does not exist. Please make sure the parent is created before this service` ); } if (state4.records.registeredIds[parent4] === "node") { throw new Error(`The service [${id28}]'s parent is not a group`); } } state4.records.registeredIds[id28] = "node"; state4.records.nodes[id28] = { id: id28, type: "service", icon: icon2, iconText, title: title2, edges: [], in: parent4 }; }, "addService"); getServices = /* @__PURE__ */ __name(() => Object.values(state4.records.nodes).filter(isArchitectureService), "getServices"); addJunction = /* @__PURE__ */ __name(function({ id: id28, in: parent4 }) { state4.records.registeredIds[id28] = "node"; state4.records.nodes[id28] = { id: id28, type: "junction", edges: [], in: parent4 }; }, "addJunction"); getJunctions = /* @__PURE__ */ __name(() => Object.values(state4.records.nodes).filter(isArchitectureJunction), "getJunctions"); getNodes2 = /* @__PURE__ */ __name(() => Object.values(state4.records.nodes), "getNodes"); getNode = /* @__PURE__ */ __name((id28) => state4.records.nodes[id28], "getNode"); addGroup = /* @__PURE__ */ __name(function({ id: id28, icon: icon2, in: parent4, title: title2 }) { if (state4.records.registeredIds[id28] !== void 0) { throw new Error( `The group id [${id28}] is already in use by another ${state4.records.registeredIds[id28]}` ); } if (parent4 !== void 0) { if (id28 === parent4) { throw new Error(`The group [${id28}] cannot be placed within itself`); } if (state4.records.registeredIds[parent4] === void 0) { throw new Error( `The group [${id28}]'s parent does not exist. Please make sure the parent is created before this group` ); } if (state4.records.registeredIds[parent4] === "node") { throw new Error(`The group [${id28}]'s parent is not a group`); } } state4.records.registeredIds[id28] = "group"; state4.records.groups[id28] = { id: id28, icon: icon2, title: title2, in: parent4 }; }, "addGroup"); getGroups = /* @__PURE__ */ __name(() => { return Object.values(state4.records.groups); }, "getGroups"); addEdge = /* @__PURE__ */ __name(function({ 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 ${lhsDir}` ); } if (!isArchitectureDirection(rhsDir)) { throw new Error( `Invalid direction given for right hand side of edge ${lhsId}--${rhsId}. Expected (L,R,T,B) got ${rhsDir}` ); } if (state4.records.nodes[lhsId] === void 0 && state4.records.groups[lhsId] === void 0) { throw new Error( `The left-hand id [${lhsId}] does not yet exist. Please create the service/group before declaring an edge to it.` ); } if (state4.records.nodes[rhsId] === void 0 && state4.records.groups[lhsId] === void 0) { 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 = state4.records.nodes[lhsId].in; const rhsGroupId = state4.records.nodes[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 }; state4.records.edges.push(edge); if (state4.records.nodes[lhsId] && state4.records.nodes[rhsId]) { state4.records.nodes[lhsId].edges.push(state4.records.edges[state4.records.edges.length - 1]); state4.records.nodes[rhsId].edges.push(state4.records.edges[state4.records.edges.length - 1]); } }, "addEdge"); getEdges3 = /* @__PURE__ */ __name(() => state4.records.edges, "getEdges"); getDataStructures = /* @__PURE__ */ __name(() => { if (state4.records.dataStructures === void 0) { const adjList = Object.entries(state4.records.nodes).reduce((prevOuter, [id28, service]) => { prevOuter[id28] = service.edges.reduce((prevInner, edge) => { if (edge.lhsId === id28) { const pair = getArchitectureDirectionPair(edge.lhsDir, edge.rhsDir); if (pair) { prevInner[pair] = edge.rhsId; } } else { const pair = getArchitectureDirectionPair(edge.rhsDir, edge.lhsDir); if (pair) { prevInner[pair] = edge.lhsId; } } return prevInner; }, {}); return prevOuter; }, {}); const firstId = Object.keys(adjList)[0]; const visited = { [firstId]: 1 }; const notVisited = Object.keys(adjList).reduce( (prev2, id28) => id28 === firstId ? prev2 : { ...prev2, [id28]: 1 }, {} ); const BFS = /* @__PURE__ */ __name((startingId) => { const spatialMap = { [startingId]: [0, 0] }; const queue = [startingId]; while (queue.length > 0) { const id28 = queue.shift(); if (id28) { visited[id28] = 1; delete notVisited[id28]; const adj = adjList[id28]; const [posX, posY] = spatialMap[id28]; Object.entries(adj).forEach(([dir2, rhsId]) => { if (!visited[rhsId]) { spatialMap[rhsId] = shiftPositionByArchitectureDirectionPair( [posX, posY], dir2 ); queue.push(rhsId); } }); } } return spatialMap; }, "BFS"); const spatialMaps = [BFS(firstId)]; while (Object.keys(notVisited).length > 0) { spatialMaps.push(BFS(Object.keys(notVisited)[0])); } state4.records.dataStructures = { adjList, spatialMaps }; } return state4.records.dataStructures; }, "getDataStructures"); setElementForId3 = /* @__PURE__ */ __name((id28, element3) => { state4.records.elements[id28] = element3; }, "setElementForId"); getElementById4 = /* @__PURE__ */ __name((id28) => state4.records.elements[id28], "getElementById"); db8 = { clear: clear26, setDiagramTitle, getDiagramTitle, setAccTitle, getAccTitle, setAccDescription, getAccDescription, addService, getServices, addJunction, getJunctions, getNodes: getNodes2, getNode, addGroup, getGroups, addEdge, getEdges: getEdges3, setElementForId: setElementForId3, getElementById: getElementById4, getDataStructures }; __name(getConfigField, "getConfigField"); } }); // src/diagrams/architecture/architectureParser.ts var populateDb2, parser22; 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, db9) => { populateCommonDb(ast, db9); ast.groups.map(db9.addGroup); ast.services.map((service) => db9.addService({ ...service, type: "service" })); ast.junctions.map((service) => db9.addJunction({ ...service, type: "junction" })); ast.edges.map(db9.addEdge); }, "populateDb"); parser22 = { parse: /* @__PURE__ */ __name(async (input) => { const ast = await parse2("architecture", input); log.debug(ast); populateDb2(ast, db8); }, "parse") }; } }); // src/diagrams/architecture/architectureStyles.ts var getStyles17, architectureStyles_default; var init_architectureStyles = __esm({ "src/diagrams/architecture/architectureStyles.ts"() { "use strict"; getStyles17 = /* @__PURE__ */ __name((options3) => ` .edge { stroke-width: ${options3.archEdgeWidth}; stroke: ${options3.archEdgeColor}; fill: none; } .arrow { fill: ${options3.archEdgeArrowColor}; } .node-bkg { fill: none; stroke: ${options3.archGroupBorderColor}; stroke-width: ${options3.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 = getStyles17; } }); // ../../node_modules/.pnpm/[email protected]/node_modules/layout-base/layout-base.js var require_layout_base2 = __commonJS({ "../../node_modules/.pnpm/[email protected]/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, property2) { return Object.prototype.hasOwnProperty.call(object3, property2); }; __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, size5, vNode) { if (size5 == 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 (size5 != null && loc != null) this.rect = new RectangleD(loc.x, loc.y, size5.width, size5.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, y5) { this.rect.x = x5; this.rect.y = y5; }; 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 nodes7 = this.child.getNodes(); for (var i2 = 0; i2 < nodes7.length; i2++) { childNode = nodes7[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 nodes7 = this.child.getNodes(); for (var i2 = 0; i2 < nodes7.length; i2++) { childNode = nodes7[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, y5) { if (x5 == null && y5 == null) { this.x = 0; this.y = 0; } else { this.x = x5; this.y = y5; } } __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(y5) { this.y = y5; }; 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 nodes7 = this.getNodes(); var s2 = nodes7.length; for (var i2 = 0; i2 < s2; i2++) { var lNode = nodes7[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 (nodes7[0].getParent().paddingLeft != void 0) { margin = nodes7[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 nodes7 = this.nodes; var s2 = nodes7.length; for (var i2 = 0; i2 < s2; i2++) { var lNode = nodes7[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 (nodes7[0].getParent().paddingLeft != void 0) { margin = nodes7[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(nodes7) { 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 = nodes7.length; for (var i2 = 0; i2 < s2; i2++) { var lNode = nodes7[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 size5 = 0; var nodes7 = this.nodes; var s2 = nodes7.length; for (var i2 = 0; i2 < s2; i2++) { var lNode = nodes7[i2]; size5 += lNode.calcEstimatedSize(); } if (size5 == 0) { this.estimatedSize = LayoutConstants.EMPTY_COMPOUND_NODE_SIZE; } else { this.estimatedSize = size5 / 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 size5 = neighborEdges.length; for (var i2 = 0; i2 < size5; 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(layout6) { LGraph = __webpack_require__(6); this.layout = layout6; 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 edges5 = this.getAllEdges(); var s2 = edges5.length; for (var i2 = 0; i2 < s2; i2++) { edge = edges5[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 nodes7 = graph.getNodes(); var s2 = nodes7.length; for (var i2 = 0; i2 < s2; i2++) { node2 = nodes7[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, f22) { if (f22 == 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 = f22.x; var y42 = f22.y; var x5 = void 0, y5 = void 0; var a1 = void 0, a2 = void 0, b1 = void 0, b2 = 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; b2 = x32 - x42; c22 = x42 * y32 - x32 * y42; denom = a1 * b2 - a2 * b1; if (denom === 0) { return null; } x5 = (b1 * c22 - b2 * c1) / denom; y5 = (a2 * c1 - a1 * c22) / denom; return new Point3(x5, y5); }; 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 b2 = p1.y; var c3 = p22.x; var d2 = p22.y; var p5 = p3.x; var q2 = p3.y; var r2 = p4.x; var s2 = p4.y; var det = (c3 - a2) * (s2 - q2) - (r2 - p5) * (d2 - b2); if (det === 0) { return false; } else { var lambda = ((s2 - q2) * (r2 - a2) + (p5 - r2) * (s2 - b2)) / det; var gamma2 = ((b2 - d2) * (r2 - a2) + (c3 - a2) * (s2 - b2)) / 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 b2 = 2 * ((Ex - Cx) * (Lx - Ex) + (Ey - Cy) * (Ly - Ey)); var c3 = (Ex - Cx) * (Ex - Cx) + (Ey - Cy) * (Ey - Cy) - r2 * r2; var disc = b2 * b2 - 4 * a2 * c3; if (disc >= 0) { var t13 = (-b2 + Math.sqrt(b2 * b2 - 4 * a2 * c3)) / (2 * a2); var t22 = (-b2 - Math.sqrt(b2 * b2 - 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, list2) { if (prev2 !== null) { prev2.next = node2; } else { list2.head = node2; } if (next3 !== null) { next3.prev = node2; } else { list2.tail = node2; } node2.prev = prev2; node2.next = next3; list2.length++; return node2; }, "add"); var _remove = /* @__PURE__ */ __name(function _remove2(node2, list2) { var prev2 = node2.prev, next3 = node2.next; if (prev2 !== null) { prev2.next = next3; } else { list2.head = next3; } if (next3 !== null) { next3.prev = prev2; } else { list2.tail = prev2; } node2.prev = node2.next = null; list2.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 size5() { 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, y5, p3) { this.x = null; this.y = null; if (x5 == null && y5 == null && p3 == null) { this.x = 0; this.y = 0; } else if (typeof x5 == "number" && typeof y5 == "number" && p3 == null) { this.x = x5; this.y = y5; } else if (x5.constructor.name == "Point" && y5 == 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, y5, p3) { if (x5.constructor.name == "Point" && y5 == null && p3 == null) { p3 = x5; this.setLocation(p3.x, p3.y); } else if (typeof x5 == "number" && typeof y5 == "number" && p3 == null) { if (parseInt(x5) == x5 && parseInt(y5) == y5) { this.move(x5, y5); } else { this.x = Math.floor(x5 + 0.5); this.y = Math.floor(y5 + 0.5); } } }; Point3.prototype.move = function(x5, y5) { this.x = x5; this.y = y5; }; 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, y5, width3, height2) { this.x = 0; this.y = 0; this.width = 0; this.height = 0; if (x5 != null && y5 != null && width3 != null && height2 != null) { this.x = x5; this.y = y5; 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(y5) { this.y = y5; }; 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(id28) { if (id28 == null) id28 = UniqueIDGeneretor.lastID; return "Object#" + id28; }; 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 _toConsumableArray(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(_toConsumableArray, "_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 Emitter3 = __webpack_require__(29); function Layout2(isRemoteUse) { Emitter3.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(Emitter3.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 nodes7 = this.graphManager.getRoot().getNodes(); for (var i2 = 0; i2 < nodes7.length; i2++) { node2 = nodes7[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 nodes7 = node2.getChild().getNodes(); for (var i2 = 0; i2 < nodes7.length; i2++) { update(nodes7[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 nodes7 = this.getAllNodes(); var node2; for (var i2 = 0; i2 < nodes7.length; i2++) { node2 = nodes7[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 nodes7 = graph.getNodes(); for (var i2 = 0; i2 < nodes7.length; i2++) { lNode = nodes7[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(_toConsumableArray(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 edges5 = []; edges5 = edges5.concat(this.graphManager.getAllEdges()); edges5 = [].concat(_toConsumableArray(this.edgeToDummyNodes.keys())).concat(edges5); for (var k2 = 0; k2 < edges5.length; k2++) { var lEdge = edges5[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, b2; if (sliderValue <= 50) { a2 = 9 * defaultValue / 500; b2 = defaultValue / 10; } else { a2 = 9 * defaultValue / 50; b2 = -8 * defaultValue; } return a2 * sliderValue + b2; } }; Layout2.findCenterOfTree = function(nodes7) { var list2 = []; list2 = list2.concat(nodes7); var removedNodes = []; var remainingDegrees = /* @__PURE__ */ new Map(); var foundCenter = false; var centerNode = null; if (list2.length == 1 || list2.length == 2) { foundCenter = true; centerNode = list2[0]; } for (var i2 = 0; i2 < list2.length; i2++) { var node2 = list2[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 < list2.length; i2++) { var node2 = list2[i2]; var index = list2.indexOf(node2); if (index >= 0) { list2.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 (list2.length == 1 || list2.length == 2) { foundCenter = true; centerNode = list2[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, y5) { 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(y5) { var yDevice = 0; var worldExtY = this.lworldExtY; if (worldExtY != 0) { yDevice = this.ldeviceOrgY + (y5 - 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(y5) { var yWorld = 0; var deviceExtY = this.ldeviceExtY; if (deviceExtY != 0) { yWorld = this.lworldOrgY + (y5 - 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 _toConsumableArray(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(_toConsumableArray, "_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, j2; 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 (j2 = i2 + 1; j2 < lNodes.length; j2++) { nodeB = lNodes[j2]; 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 distance2; 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; distance2 = Math.sqrt(distanceSquared); repulsionForce = (nodeA.nodeRepulsion / 2 + nodeB.nodeRepulsion / 2) * nodeA.noOfChildren * nodeB.noOfChildren / distanceSquared; repulsionForceX = repulsionForce * distanceX / distance2; repulsionForceY = repulsionForce * distanceY / distance2; 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 j2 = 0; j2 < sizeY; j2++) { grid[i2][j2] = 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 j2 = startY2; j2 <= finishY; j2++) { this.grid[i2][j2].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 j2 = nodeA.startY - 1; j2 < nodeA.finishY + 2; j2++) { if (!(i2 < 0 || j2 < 0 || i2 >= grid.length || j2 >= grid[0].length)) { for (var k2 = 0; k2 < grid[i2][j2].length; k2++) { nodeB = grid[i2][j2][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(_toConsumableArray(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, size5, vNode) { LNode.call(this, gm, loc, size5, 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(list2) { var keys3 = Object.keys(this.set); var length2 = keys3.length; for (var i2 = 0; i2 < length2; i2++) { list2.push(this.set[keys3[i2]]); } }; HashSet.prototype.size = function() { return Object.keys(this.set).length; }; HashSet.prototype.addAll = function(list2) { var s2 = list2.length; for (var i2 = 0; i2 < s2; i2++) { var v3 = list2[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 j2 = 0; j2 < array22[0].length; j2++) { result[i2][j2] = 0; for (var k2 = 0; k2 < array1[0].length; k2++) { result[i2][j2] += array1[i2][k2] * array22[k2][j2]; } } } return result; }; Matrix.transpose = function(array4) { var result = []; for (var i2 = 0; i2 < array4[0].length; i2++) { result[i2] = []; for (var j2 = 0; j2 < array4.length; j2++) { result[i2][j2] = array4[j2][i2]; } } return result; }; Matrix.multCons = function(array4, constant3) { var result = []; for (var i2 = 0; i2 < array4.length; i2++) { result[i2] = array4[i2] * constant3; } 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, C2, INV) { var result = []; var temp1 = []; var temp2 = []; for (var i2 = 0; i2 < C2[0].length; i2++) { var sum2 = 0; for (var j2 = 0; j2 < C2.length; j2++) { sum2 += -0.5 * C2[j2][i2] * array4[j2]; } 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 < C2.length; _i3++) { var _sum2 = 0; for (var _j2 = 0; _j2 < C2[0].length; _j2++) { _sum2 += C2[_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 q2 = this._partition(A2, p3, r2); this._quicksort(A2, p3, q2); this._quicksort(A2, q2 + 1, r2); } }, "_quicksort") }, { key: "_partition", value: /* @__PURE__ */ __name(function _partition(A2, p3, r2) { var x5 = this._get(A2, p3); var i2 = p3; var j2 = r2; while (true) { while (this.compareFunction(x5, this._get(A2, j2))) { j2--; } while (this.compareFunction(this._get(A2, i2), x5)) { i2++; } if (i2 < j2) { this._swap(A2, i2, j2); i2++; j2--; } else return j2; } }, "_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, j2) { var temp = this._get(A2, i2); this._set(A2, i2, this._get(A2, j2)); this._set(A2, j2, temp); }, "_swap") }, { key: "_defaultCompareFunction", value: /* @__PURE__ */ __name(function _defaultCompareFunction(a2, b2) { return b2 > 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 j2 = k2 + 1; j2 < this.n; j2++) { 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][j2]; } ; t4 = -t4 / A2[k2][k2]; for (var _i3 = k2; _i3 < this.m; _i3++) { A2[_i3][j2] += t4 * A2[_i3][k2]; } ; } e3[j2] = A2[k2][j2]; } ; 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 f3 = e3[p3 - 2]; e3[p3 - 2] = 0; for (var _j6 = p3 - 2; _j6 >= _k3; _j6--) { var _t5 = SVD.hypot(this.s[_j6], f3); var cs = this.s[_j6] / _t5; var sn = f3 / _t5; this.s[_j6] = _t5; if (_j6 !== _k3) { f3 = -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 scale = 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] / scale; var spm1 = this.s[p3 - 2] / scale; var epm1 = e3[p3 - 2] / scale; var sk = this.s[_k3] / scale; var ek = e3[_k3] / scale; var b2 = ((spm1 + sp) * (spm1 - sp) + epm1 * epm1) / 2; var c3 = sp * epm1 * (sp * epm1); var shift2 = 0; if (/* @__PURE__ */ function(lhs, rhs) { return lhs || rhs; }(b2 !== 0, c3 !== 0)) { shift2 = Math.sqrt(b2 * b2 + c3); if (b2 < 0) { shift2 = -shift2; } shift2 = c3 / (b2 + 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, b2) { var r2 = void 0; if (Math.abs(a2) > Math.abs(b2)) { r2 = b2 / a2; r2 = Math.abs(a2) * Math.sqrt(1 + r2 * r2); } else if (b2 != 0) { r2 = a2 / b2; r2 = Math.abs(b2) * 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 j2 = 0; j2 < this.jMax; j2++) { this.grid[i2][j2] = 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 j2 = 1; j2 < this.jMax; j2++) { this.grid[0][j2] = this.grid[0][j2 - 1] + this.gap_penalty; this.tracebackGrid[0][j2] = [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 Emitter3() { this.listeners = []; } __name(Emitter3, "Emitter"); var p3 = Emitter3.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 l2 = this.listeners[i2]; if (l2.event === event3 && l2.callback === callback) { this.listeners.splice(i2, 1); } } }; p3.emit = function(event3, data5) { for (var i2 = 0; i2 < this.listeners.length; i2++) { var l2 = this.listeners[i2]; if (event3 === l2.event) { l2.callback(data5); } } }; module3.exports = Emitter3; } /******/ ]) ); }); } }); // ../../node_modules/.pnpm/[email protected]/node_modules/cose-base/cose-base.js var require_cose_base2 = __commonJS({ "../../node_modules/.pnpm/[email protected]/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(layout6) { LGraphManager.call(this, layout6); } __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 intersection3 = this.nodesWithGravity.filter(function(x5) { return allNodes.has(x5); }); this.graphManager.setAllNodesToApplyGravitation(intersection3); this.positionNodesRandomly(); } } else { if (CoSEConstants.TREE_REDUCTION_ON_INCREMENTAL) { this.reduceTrees(); this.graphManager.resetAllNodesToApplyGravitation(); var allNodes = new Set(this.getAllNodes()); var intersection3 = this.nodesWithGravity.filter(function(x5) { return allNodes.has(x5); }); this.graphManager.setAllNodesToApplyGravitation(intersection3); } } 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 intersection3 = this.nodesWithGravity.filter(function(x5) { return allNodes.has(x5); }); this.graphManager.setAllNodesToApplyGravitation(intersection3); 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 id28 = allNodes[i2].id; pData[id28] = { id: id28, 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 nodes7 = compoundNode.getChild().getNodes(); var node3; var fixedNodeWeight2 = 0; for (var i3 = 0; i3 < nodes7.length; i3++) { node3 = nodes7[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 j2, x5, i3; for (i3 = array4.length - 1; i3 >= 2 * array4.length / 3; i3--) { j2 = Math.floor(Math.random() * (i3 + 1)); x5 = array4[i3]; array4[i3] = array4[j2]; array4[j2] = 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 count = 0; graph.forEach(function(value2, key) { if (!visited.has(key)) { components3[count] = []; isFixed[count] = false; var currentNode = key; queue.push(currentNode); visited.add(currentNode); components3[count].push(currentNode); while (queue.length != 0) { currentNode = queue.shift(); if (fixedNodes.has(currentNode)) { isFixed[count] = true; } var neighbors = graph.get(currentNode); neighbors.forEach(function(neighbor) { if (!visited.has(neighbor)) { queue.push(neighbor); visited.add(neighbor); components3[count].push(neighbor); } }); } count++; } }); 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 j2 = 0; j2 < allVerticalAlignments[i2].length; j2++) { if (this.fixedNodeSet.has(allVerticalAlignments[i2][j2])) { totalDisplacementX = 0; break; } totalDisplacementX += this.idToNodeMap.get(allVerticalAlignments[i2][j2]).displacementX; } var averageDisplacementX = totalDisplacementX / allVerticalAlignments[i2].length; for (var j2 = 0; j2 < allVerticalAlignments[i2].length; j2++) { this.idToNodeMap.get(allVerticalAlignments[i2][j2]).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 j2 = 0; j2 < allHorizontalAlignments[i2].length; j2++) { if (this.fixedNodeSet.has(allHorizontalAlignments[i2][j2])) { totalDisplacementY = 0; break; } totalDisplacementY += this.idToNodeMap.get(allHorizontalAlignments[i2][j2]).displacementY; } var averageDisplacementY = totalDisplacementY / allHorizontalAlignments[i2].length; for (var j2 = 0; j2 < allHorizontalAlignments[i2].length; j2++) { this.idToNodeMap.get(allHorizontalAlignments[i2][j2]).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 j2 = 0; j2 < component2.length; j2++) { if (this.dummyToNodeForVerticalAlignment.has(component2[j2])) { this.dummyToNodeForVerticalAlignment.get(component2[j2]).forEach(function(nodeId) { self2.idToNodeMap.get(nodeId).displacementX = 0; }); } else { this.idToNodeMap.get(component2[j2]).displacementX = 0; } } } else { var sum2 = 0; var count = 0; for (var j2 = 0; j2 < component2.length; j2++) { if (this.dummyToNodeForVerticalAlignment.has(component2[j2])) { var actualNodes = this.dummyToNodeForVerticalAlignment.get(component2[j2]); sum2 += actualNodes.length * this.idToNodeMap.get(actualNodes[0]).displacementX; count += actualNodes.length; } else { sum2 += this.idToNodeMap.get(component2[j2]).displacementX; count++; } } var averageDisplacement = sum2 / count; for (var j2 = 0; j2 < component2.length; j2++) { if (this.dummyToNodeForVerticalAlignment.has(component2[j2])) { this.dummyToNodeForVerticalAlignment.get(component2[j2]).forEach(function(nodeId) { self2.idToNodeMap.get(nodeId).displacementX = averageDisplacement; }); } else { this.idToNodeMap.get(component2[j2]).displacementX = averageDisplacement; } } } } for (var i2 = 0; i2 < this.componentsOnVertical.length; i2++) { var component2 = this.componentsOnVertical[i2]; if (this.fixedComponentsOnVertical[i2]) { for (var j2 = 0; j2 < component2.length; j2++) { if (this.dummyToNodeForHorizontalAlignment.has(component2[j2])) { this.dummyToNodeForHorizontalAlignment.get(component2[j2]).forEach(function(nodeId) { self2.idToNodeMap.get(nodeId).displacementY = 0; }); } else { this.idToNodeMap.get(component2[j2]).displacementY = 0; } } } else { var sum2 = 0; var count = 0; for (var j2 = 0; j2 < component2.length; j2++) { if (this.dummyToNodeForHorizontalAlignment.has(component2[j2])) { var actualNodes = this.dummyToNodeForHorizontalAlignment.get(component2[j2]); sum2 += actualNodes.length * this.idToNodeMap.get(actualNodes[0]).displacementY; count += actualNodes.length; } else { sum2 += this.idToNodeMap.get(component2[j2]).displacementY; count++; } } var averageDisplacement = sum2 / count; for (var j2 = 0; j2 < component2.length; j2++) { if (this.dummyToNodeForHorizontalAlignment.has(component2[j2])) { this.dummyToNodeForHorizontalAlignment.get(component2[j2]).forEach(function(nodeId) { self2.idToNodeMap.get(nodeId).displacementY = averageDisplacement; }); } else { this.idToNodeMap.get(component2[j2]).displacementY = averageDisplacement; } } } } } } }; CoSELayout.prototype.calculateNodesToApplyGravitationTo = function() { var nodeList = []; var graph; var graphs = this.graphManager.getGraphs(); var size5 = graphs.length; var i2; for (i2 = 0; i2 < size5; i2++) { graph = graphs[i2]; graph.updateConnected(); if (!graph.isConnected) { nodeList = nodeList.concat(graph.getNodes()); } } return nodeList; }; CoSELayout.prototype.createBendpoints = function() { var edges5 = []; edges5 = edges5.concat(this.graphManager.getAllEdges()); var visited = /* @__PURE__ */ new Set(); var i2; for (i2 = 0; i2 < edges5.length; i2++) { var edge = edges5[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 == edges5.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, distance2, 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_ = distance2 * Math.cos(teta); var y_ = distance2 * 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 edges5 = node2.getEdgesBetween(parentOfNode); while (edges5.length > 1) { var temp = edges5[0]; edges5.splice(0, 1); var index = neighborEdges.indexOf(temp); if (index >= 0) { neighborEdges.splice(index, 1); } incEdgesCount--; childCount--; } if (parentOfNode != null) { startIndex = (neighborEdges.indexOf(edges5[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, distance2 + 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(id28) { var compoundNode = self2.idToDummyNode[id28]; tiledZeroDegreePack[id28] = self2.tileNodes(self2.memberGroups[id28], compoundNode.paddingLeft + compoundNode.paddingRight); compoundNode.rect.width = tiledZeroDegreePack[id28].width; compoundNode.rect.height = tiledZeroDegreePack[id28].height; compoundNode.setCenter(tiledZeroDegreePack[id28].centerX, tiledZeroDegreePack[id28].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 id28 = lCompoundNode.id; var horizontalMargin = lCompoundNode.paddingLeft; var verticalMargin = lCompoundNode.paddingTop; var labelMarginLeft = lCompoundNode.labelMarginLeft; var labelMarginTop = lCompoundNode.labelMarginTop; this.adjustLocations(this.tiledMemberPack[id28], 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(id28) { var compoundNode = self2.idToDummyNode[id28]; var horizontalMargin = compoundNode.paddingLeft; var verticalMargin = compoundNode.paddingTop; var labelMarginLeft = compoundNode.labelMarginLeft; var labelMarginTop = compoundNode.labelMarginTop; self2.adjustLocations(tiledPack[id28], compoundNode.rect.x, compoundNode.rect.y, horizontalMargin, verticalMargin, labelMarginLeft, labelMarginTop); }); }; CoSELayout.prototype.getToBeTiled = function(node2) { var id28 = node2.id; if (this.toBeTiled[id28] != null) { return this.toBeTiled[id28]; } var childGraph = node2.getChild(); if (childGraph == null) { this.toBeTiled[id28] = 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[id28] = false; return false; } if (theChild.getChild() == null) { this.toBeTiled[theChild.id] = false; continue; } if (!this.getToBeTiled(theChild)) { this.toBeTiled[id28] = false; return false; } } this.toBeTiled[id28] = true; return true; }; CoSELayout.prototype.getNodeDegree = function(node2) { var id28 = node2.id; var edges5 = node2.getEdges(); var degree = 0; for (var i2 = 0; i2 < edges5.length; i2++) { var edge = edges5[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, y5, compoundHorizontalMargin, compoundVerticalMargin, compoundLabelMarginLeft, compoundLabelMarginTop) { x5 += compoundHorizontalMargin + compoundLabelMarginLeft; y5 += 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 j2 = 0; j2 < row.length; j2++) { var lnode = row[j2]; lnode.rect.x = x5; lnode.rect.y = y5; x5 += lnode.rect.width + organization.horizontalPadding; if (lnode.rect.height > maxHeight) maxHeight = lnode.rect.height; } y5 += maxHeight + organization.verticalPadding; } }; CoSELayout.prototype.tileCompoundMembers = function(childGraphMap, idToNode) { var self2 = this; this.tiledMemberPack = []; Object.keys(childGraphMap).forEach(function(id28) { var compoundNode = idToNode[id28]; self2.tiledMemberPack[id28] = self2.tileNodes(childGraphMap[id28], compoundNode.paddingLeft + compoundNode.paddingRight); compoundNode.rect.width = self2.tiledMemberPack[id28].width; compoundNode.rect.height = self2.tiledMemberPack[id28].height; compoundNode.setCenter(self2.tiledMemberPack[id28].centerX, self2.tiledMemberPack[id28].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(nodes7, minWidth) { var horizontalOrg = this.tileNodesByFavoringDim(nodes7, minWidth, true); var verticalOrg = this.tileNodesByFavoringDim(nodes7, 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 maxWidth = 0; members.forEach(function(node2) { totalWidth += node2.getWidth(); totalHeight += node2.getHeight(); if (node2.getWidth() > maxWidth) { maxWidth = 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 (maxWidth > idealWidth) { idealWidth = maxWidth; } idealWidth += horizontalPadding * 2; return idealWidth; }; CoSELayout.prototype.tileNodesByFavoringDim = function(nodes7, 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(nodes7, 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"); nodes7.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 < nodes7.length; i2++) { var lNode = nodes7[i2]; sumCenterX += lNode.getCenterX(); sumCenterY += lNode.getCenterY(); } organization.centerX = sumCenterX / nodes7.length; organization.centerY = sumCenterY / nodes7.length; for (var i2 = 0; i2 < nodes7.length; i2++) { var lNode = nodes7[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 w3 = organization.rowWidth[rowIndex] + node2.rect.width; if (organization.rows[rowIndex].length > 0) { w3 += organization.horizontalPadding; } organization.rowWidth[rowIndex] = w3; if (organization.width < w3) { organization.width = w3; } var h2 = node2.rect.height; if (rowIndex > 0) h2 += organization.verticalPadding; var extraHeight = 0; if (h2 > organization.rowHeight[rowIndex]) { extraHeight = organization.rowHeight[rowIndex]; organization.rowHeight[rowIndex] = h2; extraHeight = organization.rowHeight[rowIndex] - extraHeight; } organization.height += extraHeight; organization.rows[rowIndex].push(node2); }; CoSELayout.prototype.getShortestRowIndex = function(organization) { var r2 = -1; var min9 = Number.MAX_VALUE; for (var i2 = 0; i2 < organization.rows.length; i2++) { if (organization.rowWidth[i2] < min9) { r2 = i2; min9 = 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 min9 = organization.rowWidth[sri]; if (min9 + 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 - min9 >= extraWidth + organization.horizontalPadding) { add_to_row_ratio = (organization.height + hDiff) / (min9 + 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 last3 = 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[last3] > diff2 && longest != last3) { row.splice(-1, 1); organization.rows[last3].push(node2); organization.rowWidth[longest] = organization.rowWidth[longest] - diff2; organization.rowWidth[last3] = organization.rowWidth[last3] + 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[last3]; organization.rowHeight[longest] = maxHeight; if (organization.rowHeight[last3] < node2.height + organization.verticalPadding) organization.rowHeight[last3] = node2.height + organization.verticalPadding; var finalTotal = organization.rowHeight[longest] + organization.rowHeight[last3]; 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 j2 = 0; j2 < prunedNodesInStepTemp.length; j2++) { if (prunedNodesInStepTemp[j2][0].getEdges().length == 1) { prunedNodesInStep.push(prunedNodesInStepTemp[j2]); prunedNodesInStepTemp[j2][0].getOwner().remove(prunedNodesInStepTemp[j2][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 min9 = Integer.MAX_VALUE; var minCount; var minIndex; for (var j2 = 0; j2 < controlRegions.length; j2++) { if (controlRegions[j2] < min9) { min9 = controlRegions[j2]; minCount = 1; minIndex = j2; } else if (controlRegions[j2] == min9) { minCount++; } } if (minCount == 3 && min9 == 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 && min9 == 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 && min9 == 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, size5, vNode) { FDLayoutNode.call(this, gm, loc, size5, vNode); } __name(CoSENode, "CoSENode"); CoSENode.prototype = Object.create(FDLayoutNode.prototype); for (var prop in FDLayoutNode) { CoSENode[prop] = FDLayoutNode[prop]; } CoSENode.prototype.calculateDisplacement = function() { var layout6 = this.graphManager.getLayout(); if (this.getChild() != null && this.fixedNodeWeight) { this.displacementX += layout6.coolingFactor * (this.springForceX + this.repulsionForceX + this.gravitationForceX) / this.fixedNodeWeight; this.displacementY += layout6.coolingFactor * (this.springForceY + this.repulsionForceY + this.gravitationForceY) / this.fixedNodeWeight; } else { this.displacementX += layout6.coolingFactor * (this.springForceX + this.repulsionForceX + this.gravitationForceX) / this.noOfChildren; this.displacementY += layout6.coolingFactor * (this.springForceY + this.repulsionForceY + this.gravitationForceY) / this.noOfChildren; } if (Math.abs(this.displacementX) > layout6.coolingFactor * layout6.maxNodeDisplacement) { this.displacementX = layout6.coolingFactor * layout6.maxNodeDisplacement * IMath.sign(this.displacementX); } if (Math.abs(this.displacementY) > layout6.coolingFactor * layout6.maxNodeDisplacement) { this.displacementY = layout6.coolingFactor * layout6.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 nodes7 = this.getChild().getNodes(); var node2; for (var i2 = 0; i2 < nodes7.length; i2++) { node2 = nodes7[i2]; if (node2.getChild() == null) { node2.displacementX += dX; node2.displacementY += dY; } else { node2.propogateDisplacementToChildren(dX, dY); } } }; CoSENode.prototype.move = function() { var layout6 = this.graphManager.getLayout(); if (this.child == null || this.child.getNodes().length == 0) { this.moveBy(this.displacementX, this.displacementY); layout6.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 _toConsumableArray(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(_toConsumableArray, "_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(layout6) { var constraints = {}; constraints.fixedNodeConstraint = layout6.constraints.fixedNodeConstraint; constraints.alignmentConstraint = layout6.constraints.alignmentConstraint; constraints.relativePlacementConstraint = layout6.constraints.relativePlacementConstraint; var idToNodeMap = /* @__PURE__ */ new Map(); var nodeIndexes = /* @__PURE__ */ new Map(); var xCoords = []; var yCoords = []; var allNodes = layout6.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, direction4, 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 (direction4 == "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 (direction4 == "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 (direction4 == "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 (direction4 == "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(_toConsumableArray(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 (direction4 == "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 count = 0; graph.forEach(function(value2, key) { if (!visited.has(key)) { components4[count] = []; var _currentNode = key; queue.push(_currentNode); visited.add(_currentNode); components4[count].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[count].push(neighbor.id); } }); } count++; } }); 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 count = 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 intersection3 = new Set([].concat(_toConsumableArray(alignmentSet)).filter(function(x5) { return fixedNodes.has(x5); })); var xPos = void 0; if (intersection3.size > 0) xPos = xCoords[nodeIndexes.get(intersection3.values().next().value)]; else xPos = calculateAvgPosition(alignmentSet).x; verticalAlign[_i42].forEach(function(nodeId) { targetMatrix[count] = [xPos, yCoords[nodeIndexes.get(nodeId)]]; sourceMatrix[count] = [xCoords[nodeIndexes.get(nodeId)], yCoords[nodeIndexes.get(nodeId)]]; count++; }); }, "_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 intersection3 = new Set([].concat(_toConsumableArray(alignmentSet)).filter(function(x5) { return fixedNodes.has(x5); })); var yPos = void 0; if (intersection3.size > 0) yPos = xCoords[nodeIndexes.get(intersection3.values().next().value)]; else yPos = calculateAvgPosition(alignmentSet).y; horizontalAlign[_i52].forEach(function(nodeId) { targetMatrix[count] = [xCoords[nodeIndexes.get(nodeId)], yPos]; sourceMatrix[count] = [xCoords[nodeIndexes.get(nodeId)], yCoords[nodeIndexes.get(nodeId)]]; count++; }); }, "_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 intersection3 = new Set([].concat(_toConsumableArray(alignmentSet)).filter(function(x5) { return fixedNodes.has(x5); })); var xPos = void 0; if (intersection3.size > 0) xPos = xCoords[nodeIndexes.get(intersection3.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 intersection3 = new Set([].concat(_toConsumableArray(alignmentSet)).filter(function(x5) { return fixedNodes.has(x5); })); var yPos = void 0; if (intersection3.size > 0) yPos = yCoords[nodeIndexes.get(intersection3.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/[email protected][email protected]/node_modules/cytoscape-fcose/cytoscape-fcose.js var require_cytoscape_fcose = __commonJS({ "../../node_modules/.pnpm/[email protected][email protected]/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 _e = 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; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } 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(nodes7) { var nodesMap2 = {}; for (var i2 = 0; i2 < nodes7.length; i2++) { nodesMap2[nodes7[i2].id()] = true; } var roots = nodes7.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 count = 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 && count > 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); count++; } }, "_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, options3) { if (!options3.fixedNodeConstraint) { var minXCoord = Number.POSITIVE_INFINITY; var maxXCoord = Number.NEGATIVE_INFINITY; var minYCoord = Number.POSITIVE_INFINITY; var maxYCoord = Number.NEGATIVE_INFINITY; if (options3.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 = options3.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(y5) { return y5 + 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 nodes7 = parentNode.descendants().not(":parent"); var s2 = nodes7.length; for (var i2 = 0; i2 < s2; i2++) { var node2 = nodes7[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(options3, spectralResult) { var cy = options3.cy; var eles = options3.eles; var nodes7 = eles.nodes(); var edges5 = eles.edges(); var nodeIndexes = void 0; var xCoords = void 0; var yCoords = void 0; var idToLNode = {}; if (options3.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, layout6, options4) { var size5 = children2.length; for (var i2 = 0; i2 < size5; 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: options4.nodeDimensionsIncludeLabels }); if (theChild.outerWidth() != null && theChild.outerHeight() != null) { if (options4.randomize) { if (!theChild.isParent()) { theNode = parent4.add(new CoSENode(layout6.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(layout6.graphManager, new PointD(parentInfo.topLeftX, parentInfo.topLeftY), new DimensionD2(parentInfo.width, parentInfo.height))); } else { theNode = parent4.add(new CoSENode(layout6.graphManager, new PointD(parentInfo.topLeftX, parentInfo.topLeftY), new DimensionD2(parseFloat(dimensions2.w), parseFloat(dimensions2.h)))); } } } else { theNode = parent4.add(new CoSENode(layout6.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(options4.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 (options4.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 = layout6.getGraphManager().add(layout6.newGraph(), theNode); processChildrenList2(theNewGraph, children_of_children, layout6, options4); } } }, "processChildrenList"); var processEdges = /* @__PURE__ */ __name(function processEdges2(layout6, gm2, edges6) { var idealLengthTotal = 0; var edgeCount3 = 0; for (var i2 = 0; i2 < edges6.length; i2++) { var edge = edges6[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(layout6.newEdge(), sourceNode, targetNode); e1.id = edge.id(); e1.idealLength = optFn(options3.idealEdgeLength, edge); e1.edgeElasticity = optFn(options3.edgeElasticity, edge); idealLengthTotal += e1.idealLength; edgeCount3++; } } if (options3.idealEdgeLength != null) { if (edgeCount3 > 0) CoSEConstants.DEFAULT_EDGE_LENGTH = FDLayoutConstants.DEFAULT_EDGE_LENGTH = idealLengthTotal / edgeCount3; else if (!isFn(options3.idealEdgeLength)) CoSEConstants.DEFAULT_EDGE_LENGTH = FDLayoutConstants.DEFAULT_EDGE_LENGTH = options3.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(layout6, options4) { if (options4.fixedNodeConstraint) { layout6.constraints["fixedNodeConstraint"] = options4.fixedNodeConstraint; } if (options4.alignmentConstraint) { layout6.constraints["alignmentConstraint"] = options4.alignmentConstraint; } if (options4.relativePlacementConstraint) { layout6.constraints["relativePlacementConstraint"] = options4.relativePlacementConstraint; } }, "processConstraints"); if (options3.nestingFactor != null) CoSEConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = options3.nestingFactor; if (options3.gravity != null) CoSEConstants.DEFAULT_GRAVITY_STRENGTH = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH = options3.gravity; if (options3.numIter != null) CoSEConstants.MAX_ITERATIONS = FDLayoutConstants.MAX_ITERATIONS = options3.numIter; if (options3.gravityRange != null) CoSEConstants.DEFAULT_GRAVITY_RANGE_FACTOR = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR = options3.gravityRange; if (options3.gravityCompound != null) CoSEConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = options3.gravityCompound; if (options3.gravityRangeCompound != null) CoSEConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = options3.gravityRangeCompound; if (options3.initialEnergyOnIncremental != null) CoSEConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = options3.initialEnergyOnIncremental; if (options3.tilingCompareBy != null) CoSEConstants.TILING_COMPARE_BY = options3.tilingCompareBy; if (options3.quality == "proof") LayoutConstants.QUALITY = 2; else LayoutConstants.QUALITY = 0; CoSEConstants.NODE_DIMENSIONS_INCLUDE_LABELS = FDLayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = options3.nodeDimensionsIncludeLabels; CoSEConstants.DEFAULT_INCREMENTAL = FDLayoutConstants.DEFAULT_INCREMENTAL = LayoutConstants.DEFAULT_INCREMENTAL = !options3.randomize; CoSEConstants.ANIMATE = FDLayoutConstants.ANIMATE = LayoutConstants.ANIMATE = options3.animate; CoSEConstants.TILE = options3.tile; CoSEConstants.TILING_PADDING_VERTICAL = typeof options3.tilingPaddingVertical === "function" ? options3.tilingPaddingVertical.call() : options3.tilingPaddingVertical; CoSEConstants.TILING_PADDING_HORIZONTAL = typeof options3.tilingPaddingHorizontal === "function" ? options3.tilingPaddingHorizontal.call() : options3.tilingPaddingHorizontal; CoSEConstants.DEFAULT_INCREMENTAL = FDLayoutConstants.DEFAULT_INCREMENTAL = LayoutConstants.DEFAULT_INCREMENTAL = true; CoSEConstants.PURE_INCREMENTAL = !options3.randomize; LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES = options3.uniformNodeDimensions; if (options3.step == "transformed") { CoSEConstants.TRANSFORM_ON_CONSTRAINT_HANDLING = true; CoSEConstants.ENFORCE_CONSTRAINTS = false; CoSEConstants.APPLY_LAYOUT = false; } if (options3.step == "enforced") { CoSEConstants.TRANSFORM_ON_CONSTRAINT_HANDLING = false; CoSEConstants.ENFORCE_CONSTRAINTS = true; CoSEConstants.APPLY_LAYOUT = false; } if (options3.step == "cose") { CoSEConstants.TRANSFORM_ON_CONSTRAINT_HANDLING = false; CoSEConstants.ENFORCE_CONSTRAINTS = false; CoSEConstants.APPLY_LAYOUT = true; } if (options3.step == "all") { if (options3.randomize) CoSEConstants.TRANSFORM_ON_CONSTRAINT_HANDLING = true; else CoSEConstants.TRANSFORM_ON_CONSTRAINT_HANDLING = false; CoSEConstants.ENFORCE_CONSTRAINTS = true; CoSEConstants.APPLY_LAYOUT = true; } if (options3.fixedNodeConstraint || options3.alignmentConstraint || options3.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(nodes7), coseLayout3, options3); processEdges(coseLayout3, gm, edges5); processConstraints(coseLayout3, options3); 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 defaults4 = 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(options3) { _classCallCheck2(this, Layout3); this.options = assign7({}, defaults4, options3); } __name(Layout3, "Layout"); _createClass2(Layout3, [{ key: "run", value: /* @__PURE__ */ __name(function run5() { var layout6 = this; var options3 = this.options; var cy = options3.cy; var eles = options3.eles; var spectralResult = []; var xCoords = void 0; var yCoords = void 0; var coseResult = []; var components3 = void 0; var componentCenters = []; if (options3.fixedNodeConstraint && (!Array.isArray(options3.fixedNodeConstraint) || options3.fixedNodeConstraint.length == 0)) { options3.fixedNodeConstraint = void 0; } if (options3.alignmentConstraint) { if (options3.alignmentConstraint.vertical && (!Array.isArray(options3.alignmentConstraint.vertical) || options3.alignmentConstraint.vertical.length == 0)) { options3.alignmentConstraint.vertical = void 0; } if (options3.alignmentConstraint.horizontal && (!Array.isArray(options3.alignmentConstraint.horizontal) || options3.alignmentConstraint.horizontal.length == 0)) { options3.alignmentConstraint.horizontal = void 0; } } if (options3.relativePlacementConstraint && (!Array.isArray(options3.relativePlacementConstraint) || options3.relativePlacementConstraint.length == 0)) { options3.relativePlacementConstraint = void 0; } var constraintExist = options3.fixedNodeConstraint || options3.alignmentConstraint || options3.relativePlacementConstraint; if (constraintExist) { options3.tile = false; options3.packComponents = false; } var layUtil = void 0; var packingEnabled = false; if (cy.layoutUtilities && options3.packComponents) { layUtil = cy.layoutUtilities("get"); if (!layUtil) layUtil = cy.layoutUtilities(); packingEnabled = true; } if (eles.nodes().length > 0) { if (!packingEnabled) { var boundingBox3 = options3.eles.boundingBox(); componentCenters.push({ x: boundingBox3.x1 + boundingBox3.w / 2, y: boundingBox3.y1 + boundingBox3.h / 2 }); if (options3.randomize) { var result = spectralLayout(options3); spectralResult.push(result); } if (options3.quality == "default" || options3.quality == "proof") { coseResult.push(coseLayout(options3, spectralResult[0])); aux.relocateComponent(componentCenters[0], coseResult[0], options3); } else { aux.relocateComponent(componentCenters[0], spectralResult[0], options3); } } else { var topMostNodes = aux.getTopMostNodes(options3.eles.nodes()); components3 = aux.connectComponents(cy, options3.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 (options3.randomize) { components3.forEach(function(component2) { options3.eles = component2; spectralResult.push(spectralLayout(options3)); }); } if (options3.quality == "default" || options3.quality == "proof") { var toBeTiledNodes = cy.collection(); if (options3.tile) { var nodeIndexes = /* @__PURE__ */ new Map(); var _xCoords = []; var _yCoords = []; var count = 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(), count++); 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) { options3.eles = component2; coseResult.push(coseLayout(options3, spectralResult[index])); aux.relocateComponent(componentCenters[index], coseResult[index], options3); }); } else { components3.forEach(function(component2, index) { aux.relocateComponent(componentCenters[index], spectralResult[index], options3); }); } 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 (options3.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 (options3.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 (options3.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, options3.randomize).shifts; if (options3.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(y5) { return y5 + 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 (options3.quality == "default" || options3.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 (options3.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 (options3.quality == "default" || options3.quality == "proof" || options3.randomize) { var parentsWithoutChildren = aux.calcParentsWithoutChildren(cy, eles); var _hiddenEles = eles.filter(function(ele) { return ele.css("display") == "none"; }); options3.eles = eles.not(_hiddenEles); eles.nodes().not(":parent").not(_hiddenEles).layoutPositions(layout6, options3, 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(options3) { var cy = options3.cy; var eles = options3.eles; var nodes7 = 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 C2 = []; var PHI = []; var INV = []; var firstSample = void 0; var nodeSize = void 0; var infinity = 1e8; var small = 1e-9; var piTol = options3.piTol; var samplingType = options3.samplingType; var nodeSeparation = options3.nodeSeparation; var sampleSize = void 0; var randomSampleCR = /* @__PURE__ */ __name(function randomSampleCR2() { var sample2 = 0; var count = 0; var flag = false; while (count < sampleSize) { sample2 = Math.floor(Math.random() * nodeSize); flag = false; for (var i3 = 0; i3 < count; i3++) { if (samplesColumn[i3] == sample2) { flag = true; break; } } if (!flag) { samplesColumn[count] = sample2; count++; } 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 distance2 = []; var max_dist = 0; var max_ind = 1; for (var i3 = 0; i3 < nodeSize; i3++) { distance2[i3] = infinity; } path4[back] = pivot; distance2[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 (distance2[temp] == infinity) { distance2[temp] = distance2[current] + 1; path4[++back] = temp; } } C2[current][index2] = distance2[current] * nodeSeparation; } if (samplingMethod) { for (var _i2 = 0; _i2 < nodeSize; _i2++) { if (C2[_i2][index2] < minDistancesColumn[_i2]) minDistancesColumn[_i2] = C2[_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 j2 = 0; j2 < sampleSize; j2++) { C2[_i6][j2] *= C2[_i6][j2]; } } 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] = C2[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 j2 = 0; j2 < sampleSize; j2++) { a_Sig[i3][j2] = 0; if (i3 == j2) { a_Sig[i3][j2] = 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 V2 = []; for (var i3 = 0; i3 < nodeSize; i3++) { Y1[i3] = Math.random(); Y22[i3] = Math.random(); } Y1 = Matrix.normalize(Y1); Y22 = Matrix.normalize(Y22); var count = 0; var current = small; var previous = small; var temp = void 0; while (true) { count++; for (var _i9 = 0; _i9 < nodeSize; _i9++) { V1[_i9] = Y1[_i9]; } Y1 = Matrix.multGamma(Matrix.multL(Matrix.multGamma(V1), C2, 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]; } count = 0; previous = small; while (true) { count++; for (var _i11 = 0; _i11 < nodeSize; _i11++) { V2[_i11] = Y22[_i11]; } V2 = Matrix.minusOp(V2, Matrix.multCons(V1, Matrix.dotProduct(V1, V2))); Y22 = Matrix.multGamma(Matrix.multL(Matrix.multGamma(V2), C2, INV)); theta2 = Matrix.dotProduct(V2, Y22); Y22 = Matrix.normalize(Y22); current = Matrix.dotProduct(V2, Y22); temp = Math.abs(current / previous); if (temp <= 1 + piTol && temp >= 1) { break; } previous = current; } for (var _i12 = 0; _i12 < nodeSize; _i12++) { V2[_i12] = Y22[_i12]; } xCoords = Matrix.multCons(V1, Math.sqrt(Math.abs(theta1))); yCoords = Matrix.multCons(V2, Math.sqrt(Math.abs(theta2))); }, "powerIteration"); aux.connectComponents(cy, eles, aux.getTopMostNodes(nodes7), dummyNodes); parentNodes.forEach(function(ele) { aux.connectComponents(cy, eles, aux.getTopMostNodes(ele.descendants().intersection(eles)), dummyNodes); }); var index = 0; for (var i2 = 0; i2 < nodes7.length; i2++) { if (!nodes7[i2].isParent()) { nodeIndexes.set(nodes7[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 min9 = children2.nodes(":childless")[0].connectedEdges().length; children2.nodes(":childless").forEach(function(ele2, i3) { if (ele2.connectedEdges().length < min9) { min9 = ele2.connectedEdges().length; index2 = i3; } }); parentChildMap.set(ele.id(), children2.nodes(":childless")[index2].id()); }); nodes7.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(id28) { if (cy.getElementById(id28).isParent()) disconnectedId = parentChildMap.get(id28); else disconnectedId = id28; 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 < options3.sampleSize ? nodeSize : options3.sampleSize; for (var _i14 = 0; _i14 < nodeSize; _i14++) { C2[_i14] = []; } for (var _i15 = 0; _i15 < sampleSize; _i15++) { INV[_i15] = []; } if (options3.quality == "draft" || options3.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 + options3.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/architectureIcons.ts var wrapIcon, architectureIcons; var init_architectureIcons = __esm({ "src/diagrams/architecture/architectureIcons.ts"() { "use strict"; init_icons(); wrapIcon = /* @__PURE__ */ __name((icon2) => { return `${icon2}`; }, "wrapIcon"); architectureIcons = { prefix: "mermaid-architecture", height: 80, width: 80, icons: { database: { body: wrapIcon( '' ) }, server: { body: wrapIcon( '' ) }, disk: { body: wrapIcon( '' ) }, internet: { body: wrapIcon( '' ) }, cloud: { body: wrapIcon( '' ) }, unknown: unknownIcon, blank: { body: wrapIcon("") } } }; } }); // src/diagrams/architecture/svgDraw.ts var drawEdges2, drawGroups, drawServices, drawJunctions; var init_svgDraw6 = __esm({ "src/diagrams/architecture/svgDraw.ts"() { "use strict"; init_icons(); init_diagramAPI(); init_createText(); init_architectureDb(); init_architectureIcons(); init_architectureTypes(); drawEdges2 = /* @__PURE__ */ __name(async function(edgesEl, cy) { const padding2 = getConfigField("padding"); const iconSize = 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 = padding2 + 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 && db8.getNode(source)?.type === "junction") { if (isArchitectureDirectionX(sourceDir)) { startX2 += sourceDir === "L" ? halfIconSize : -halfIconSize; } else { startY2 += sourceDir === "T" ? halfIconSize : -halfIconSize; } } if (!targetGroup && db8.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"); 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, y5] = getArchitectureDirectionXYFactors(pair); textElem.attr("dominant-baseline", "auto").attr("transform", `rotate(${-1 * x5 * y5 * 45})`); const bboxNew = textElem.node().getBoundingClientRect(); textElem.attr( "transform", ` translate(${midX}, ${midY - bboxOrig.height / 2}) translate(${x5 * bboxNew.width / 2}, ${y5 * bboxNew.height / 2}) rotate(${-1 * x5 * y5 * 45}, 0, ${bboxOrig.height / 2}) ` ); } } } } }) ); }, "drawEdges"); drawGroups = /* @__PURE__ */ __name(async function(groupsEl, cy) { const padding2 = getConfigField("padding"); const groupIconSize = padding2 * 0.75; const fontSize = getConfigField("fontSize"); const iconSize = getConfigField("iconSize"); const halfIconSize = iconSize / 2; await Promise.all( cy.nodes().map(async (node2) => { const data5 = nodeData(node2); if (data5.type === "group") { const { h: h2, w: w3, x1, y1 } = node2.boundingBox(); groupsEl.append("rect").attr("x", x1 + halfIconSize).attr("y", y1 + halfIconSize).attr("width", w3).attr("height", h2).attr("class", "node-bkg"); const groupLabelContainer = groupsEl.append("g"); let shiftedX1 = x1; let shiftedY1 = y1; if (data5.icon) { const bkgElem = groupLabelContainer.append("g"); bkgElem.html( `${await getIconSVG(data5.icon, { height: groupIconSize, width: groupIconSize, fallbackPrefix: architectureIcons.prefix })}` ); bkgElem.attr( "transform", "translate(" + (shiftedX1 + halfIconSize + 1) + ", " + (shiftedY1 + halfIconSize + 1) + ")" ); shiftedX1 += groupIconSize; shiftedY1 += fontSize / 2 - 1 - 2; } if (data5.label) { const textElem = groupLabelContainer.append("g"); await createText( textElem, data5.label, { useHtmlLabels: false, width: w3, 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) + ")" ); } } }) ); }, "drawGroups"); drawServices = /* @__PURE__ */ __name(async function(db9, elem, services) { for (const service of services) { const serviceElem = elem.append("g"); const iconSize = 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" }, getConfig2() ); 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( `${await getIconSVG(service.icon, { height: iconSize, width: iconSize, fallbackPrefix: architectureIcons.prefix })}` ); } else if (service.iconText) { bkgElem.html( `${await getIconSVG("blank", { height: iconSize, width: iconSize, fallbackPrefix: architectureIcons.prefix })}` ); 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(service.iconText); 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", "node-" + service.id).attr( "d", `M0 ${iconSize} v${-iconSize} q0,-5 5,-5 h${iconSize} q5,0 5,5 v${iconSize} H0 Z` ); } serviceElem.attr("class", "architecture-service"); const { width: width3, height: height2 } = serviceElem._groups[0][0].getBBox(); service.width = width3; service.height = height2; db9.setElementForId(service.id, serviceElem); } return 0; }, "drawServices"); drawJunctions = /* @__PURE__ */ __name(function(db9, elem, junctions) { junctions.forEach((junction) => { const junctionElem = elem.append("g"); const iconSize = getConfigField("iconSize"); const bkgElem = junctionElem.append("g"); bkgElem.append("rect").attr("id", "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; db9.setElementForId(junction.id, junctionElem); }); }, "drawJunctions"); } }); // src/diagrams/architecture/architectureRenderer.ts function addServices(services, cy) { services.forEach((service) => { cy.add({ group: "nodes", data: { type: "service", id: service.id, icon: service.icon, label: service.title, parent: service.in, width: getConfigField("iconSize"), height: getConfigField("iconSize") }, classes: "node-service" }); }); } function addJunctions(junctions, cy) { junctions.forEach((junction) => { cy.add({ group: "nodes", data: { type: "junction", id: junction.id, parent: junction.in, width: getConfigField("iconSize"), height: getConfigField("iconSize") }, classes: "node-junction" }); }); } function positionNodes2(db9, cy) { cy.nodes().map((node2) => { const data5 = nodeData(node2); if (data5.type === "group") { return; } data5.x = node2.position().x; data5.y = node2.position().y; const nodeElem = db9.getElementById(data5.id); nodeElem.attr("transform", "translate(" + (data5.x || 0) + "," + (data5.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 addEdges(edges5, cy) { edges5.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(spatialMaps) { const alignments = spatialMaps.map((spatialMap) => { const horizontalAlignments = {}; const verticalAlignments = {}; Object.entries(spatialMap).forEach(([id28, [x5, y5]]) => { if (!horizontalAlignments[y5]) { horizontalAlignments[y5] = []; } if (!verticalAlignments[x5]) { verticalAlignments[x5] = []; } horizontalAlignments[y5].push(id28); verticalAlignments[x5].push(id28); }); return { horiz: Object.values(horizontalAlignments).filter((arr) => arr.length > 1), vert: Object.values(verticalAlignments).filter((arr) => arr.length > 1) }; }); const [horizontal, vertical] = alignments.reduce( ([prevHoriz, prevVert], { horiz, vert }) => { return [ [...prevHoriz, ...horiz], [...prevVert, ...vert] ]; }, [[], []] ); return { horizontal, vertical }; } function getRelativeConstraints(spatialMaps) { const relativeConstraints = []; 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 = Object.fromEntries( Object.entries(spatialMap).map(([id28, pos]) => [posToStr(pos), id28]) ); 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[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[newPos]; if (newId2 && !visited[newPos]) { queue.push(newPos); relativeConstraints.push({ [ArchitectureDirectionName[dir2]]: newId2, [ArchitectureDirectionName[getOppositeArchitectureDirection(dir2)]]: currId, gap: 1.5 * getConfigField("iconSize") }); } }); } } } }); return relativeConstraints; } function layoutArchitecture(services, junctions, groups, edges5, { spatialMaps }) { return new Promise((resolve3) => { 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", label: "data(label)", "source-endpoint": "data(sourceEndpoint)", "target-endpoint": "data(targetEndpoint)" } }, { 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": `${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: `${getConfigField("padding")}px` } } ] }); renderEl.remove(); addGroups(groups, cy); addServices(services, cy); addJunctions(junctions, cy); addEdges(edges5, cy); const alignmentConstraint = getAlignments(spatialMaps); const relativePlacementConstraint = getRelativeConstraints(spatialMaps); const layout6 = cy.layout({ name: "fcose", quality: "proof", 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); const elasticity = parentA === parentB ? 1.5 * getConfigField("iconSize") : 0.5 * getConfigField("iconSize"); return elasticity; }, edgeElasticity(edge) { const [nodeA, nodeB] = edge.connectedNodes(); const { parent: parentA } = nodeData(nodeA); const { parent: parentB } = nodeData(nodeB); const elasticity = parentA === parentB ? 0.45 : 1e-3; return elasticity; }, alignmentConstraint, relativePlacementConstraint }); layout6.one("layoutstop", () => { function getSegmentWeights(source, target, pointX, pointY) { let W2, D3; const { x: sX, y: sY } = source; const { x: tX, y: tY } = target; D3 = (pointY - sY + (sX - pointX) * (sY - tY) / (sX - tX)) / Math.sqrt(1 + Math.pow((sY - tY) / (sX - tX), 2)); W2 = Math.sqrt(Math.pow(pointY - sY, 2) + Math.pow(pointX - sX, 2) - Math.pow(D3, 2)); const distAB = Math.sqrt(Math.pow(tX - sX, 2) + Math.pow(tY - sY, 2)); W2 = W2 / 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; } D3 = Math.abs(D3) * delta1; W2 = W2 * delta2; return { distances: D3, weights: W2 }; } __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(); layout6.run(); }); layout6.run(); cy.ready((e3) => { log.info("Ready", e3); resolve3(cy); }); }); } var import_cytoscape_fcose, draw23, renderer7; var init_architectureRenderer = __esm({ "src/diagrams/architecture/architectureRenderer.ts"() { "use strict"; init_icons(); init_cytoscape_esm(); import_cytoscape_fcose = __toESM(require_cytoscape_fcose(), 1); init_src32(); init_logger(); init_selectSvgElement(); init_setupGraphViewbox(); init_architectureDb(); 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(positionNodes2, "positionNodes"); __name(addGroups, "addGroups"); __name(addEdges, "addEdges"); __name(getAlignments, "getAlignments"); __name(getRelativeConstraints, "getRelativeConstraints"); __name(layoutArchitecture, "layoutArchitecture"); draw23 = /* @__PURE__ */ __name(async (text3, id28, _version, diagObj) => { const db9 = diagObj.db; const services = db9.getServices(); const junctions = db9.getJunctions(); const groups = db9.getGroups(); const edges5 = db9.getEdges(); const ds = db9.getDataStructures(); const svg = selectSvgElement(id28); const edgesElem = svg.append("g"); edgesElem.attr("class", "architecture-edges"); const servicesElem = svg.append("g"); servicesElem.attr("class", "architecture-services"); const groupElem = svg.append("g"); groupElem.attr("class", "architecture-groups"); await drawServices(db9, servicesElem, services); drawJunctions(db9, servicesElem, junctions); const cy = await layoutArchitecture(services, junctions, groups, edges5, ds); await drawEdges2(edgesElem, cy); await drawGroups(groupElem, cy); positionNodes2(db9, cy); setupGraphViewbox(void 0, svg, getConfigField("padding"), getConfigField("useMaxWidth")); }, "draw"); renderer7 = { draw: draw23 }; } }); // src/diagrams/architecture/architectureDiagram.ts var architectureDiagram_exports = {}; __export(architectureDiagram_exports, { diagram: () => diagram24 }); var diagram24; var init_architectureDiagram = __esm({ "src/diagrams/architecture/architectureDiagram.ts"() { "use strict"; init_architectureParser(); init_architectureDb(); init_architectureStyles(); init_architectureRenderer(); diagram24 = { parser: parser22, db: db8, renderer: renderer7, styles: architectureStyles_default }; } }); // 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: diagram25 } = await Promise.resolve().then(() => (init_c4Diagram2(), c4Diagram_exports)); return { id: id2, diagram: diagram25 }; }, "loader"); var plugin = { id: id2, detector, loader }; var c4Detector_default = plugin; // src/diagrams/flowchart/flowDetector.ts var id3 = "flowchart"; var detector2 = /* @__PURE__ */ __name((txt, config6) => { if (config6?.flowchart?.defaultRenderer === "dagre-wrapper" || config6?.flowchart?.defaultRenderer === "elk") { return false; } return /^\s*graph/.test(txt); }, "detector"); var loader3 = /* @__PURE__ */ __name(async () => { const { diagram: diagram25 } = await Promise.resolve().then(() => (init_flowDiagram(), flowDiagram_exports)); return { id: id3, diagram: diagram25 }; }, "loader"); var plugin2 = { id: id3, detector: detector2, loader: loader3 }; var flowDetector_default = plugin2; // src/diagrams/flowchart/flowDetector-v2.ts var id4 = "flowchart-v2"; var detector3 = /* @__PURE__ */ __name((txt, config6) => { if (config6?.flowchart?.defaultRenderer === "dagre-d3") { return false; } if (config6?.flowchart?.defaultRenderer === "elk") { config6.layout = "elk"; } if (/^\s*graph/.test(txt) && config6?.flowchart?.defaultRenderer === "dagre-wrapper") { return true; } return /^\s*flowchart/.test(txt); }, "detector"); var loader4 = /* @__PURE__ */ __name(async () => { const { diagram: diagram25 } = await Promise.resolve().then(() => (init_flowDiagram(), flowDiagram_exports)); return { id: id4, diagram: diagram25 }; }, "loader"); var plugin3 = { id: id4, detector: detector3, loader: loader4 }; var flowDetector_v2_default = plugin3; // src/diagrams/er/erDetector.ts var id5 = "er"; var detector4 = /* @__PURE__ */ __name((txt) => { return /^\s*erDiagram/.test(txt); }, "detector"); var loader5 = /* @__PURE__ */ __name(async () => { const { diagram: diagram25 } = await Promise.resolve().then(() => (init_erDiagram2(), erDiagram_exports)); return { id: id5, diagram: diagram25 }; }, "loader"); var plugin4 = { id: id5, detector: detector4, loader: loader5 }; var erDetector_default = plugin4; // src/diagrams/git/gitGraphDetector.ts var id6 = "gitGraph"; var detector5 = /* @__PURE__ */ __name((txt) => { return /^\s*gitGraph/.test(txt); }, "detector"); var loader6 = /* @__PURE__ */ __name(async () => { const { diagram: diagram25 } = await Promise.resolve().then(() => (init_gitGraphDiagram(), gitGraphDiagram_exports)); return { id: id6, diagram: diagram25 }; }, "loader"); var plugin5 = { id: id6, detector: detector5, loader: loader6 }; var gitGraphDetector_default = plugin5; // src/diagrams/gantt/ganttDetector.ts var id7 = "gantt"; var detector6 = /* @__PURE__ */ __name((txt) => { return /^\s*gantt/.test(txt); }, "detector"); var loader7 = /* @__PURE__ */ __name(async () => { const { diagram: diagram25 } = await Promise.resolve().then(() => (init_ganttDiagram(), ganttDiagram_exports)); return { id: id7, diagram: diagram25 }; }, "loader"); var plugin6 = { id: id7, detector: detector6, loader: loader7 }; var ganttDetector_default = plugin6; // src/diagrams/info/infoDetector.ts var id8 = "info"; var detector7 = /* @__PURE__ */ __name((txt) => { return /^\s*info/.test(txt); }, "detector"); var loader8 = /* @__PURE__ */ __name(async () => { const { diagram: diagram25 } = await Promise.resolve().then(() => (init_infoDiagram(), infoDiagram_exports)); return { id: id8, diagram: diagram25 }; }, "loader"); var info = { id: id8, detector: detector7, loader: loader8 }; // src/diagrams/pie/pieDetector.ts var id9 = "pie"; var detector8 = /* @__PURE__ */ __name((txt) => { return /^\s*pie/.test(txt); }, "detector"); var loader9 = /* @__PURE__ */ __name(async () => { const { diagram: diagram25 } = await Promise.resolve().then(() => (init_pieDiagram(), pieDiagram_exports)); return { id: id9, diagram: diagram25 }; }, "loader"); var pie = { id: id9, detector: detector8, loader: loader9 }; // src/diagrams/quadrant-chart/quadrantDetector.ts var id10 = "quadrantChart"; var detector9 = /* @__PURE__ */ __name((txt) => { return /^\s*quadrantChart/.test(txt); }, "detector"); var loader10 = /* @__PURE__ */ __name(async () => { const { diagram: diagram25 } = await Promise.resolve().then(() => (init_quadrantDiagram(), quadrantDiagram_exports)); return { id: id10, diagram: diagram25 }; }, "loader"); var plugin7 = { id: id10, detector: detector9, loader: loader10 }; var quadrantDetector_default = plugin7; // src/diagrams/xychart/xychartDetector.ts var id11 = "xychart"; var detector10 = /* @__PURE__ */ __name((txt) => { return /^\s*xychart-beta/.test(txt); }, "detector"); var loader11 = /* @__PURE__ */ __name(async () => { const { diagram: diagram25 } = await Promise.resolve().then(() => (init_xychartDiagram(), xychartDiagram_exports)); return { id: id11, diagram: diagram25 }; }, "loader"); var plugin8 = { id: id11, detector: detector10, loader: loader11 }; var xychartDetector_default = plugin8; // src/diagrams/requirement/requirementDetector.ts var id12 = "requirement"; var detector11 = /* @__PURE__ */ __name((txt) => { return /^\s*requirement(Diagram)?/.test(txt); }, "detector"); var loader12 = /* @__PURE__ */ __name(async () => { const { diagram: diagram25 } = await Promise.resolve().then(() => (init_requirementDiagram2(), requirementDiagram_exports)); return { id: id12, diagram: diagram25 }; }, "loader"); var plugin9 = { id: id12, detector: detector11, loader: loader12 }; var requirementDetector_default = plugin9; // src/diagrams/sequence/sequenceDetector.ts var id13 = "sequence"; var detector12 = /* @__PURE__ */ __name((txt) => { return /^\s*sequenceDiagram/.test(txt); }, "detector"); var loader13 = /* @__PURE__ */ __name(async () => { const { diagram: diagram25 } = await Promise.resolve().then(() => (init_sequenceDiagram2(), sequenceDiagram_exports)); return { id: id13, diagram: diagram25 }; }, "loader"); var plugin10 = { id: id13, detector: detector12, loader: loader13 }; var sequenceDetector_default = plugin10; // src/diagrams/class/classDetector.ts var id14 = "class"; var detector13 = /* @__PURE__ */ __name((txt, config6) => { if (config6?.class?.defaultRenderer === "dagre-wrapper") { return false; } return /^\s*classDiagram/.test(txt); }, "detector"); var loader14 = /* @__PURE__ */ __name(async () => { const { diagram: diagram25 } = await Promise.resolve().then(() => (init_classDiagram2(), classDiagram_exports)); return { id: id14, diagram: diagram25 }; }, "loader"); var plugin11 = { id: id14, detector: detector13, loader: loader14 }; var classDetector_default = plugin11; // src/diagrams/class/classDetector-V2.ts var id15 = "classDiagram"; var detector14 = /* @__PURE__ */ __name((txt, config6) => { if (/^\s*classDiagram/.test(txt) && config6?.class?.defaultRenderer === "dagre-wrapper") { return true; } return /^\s*classDiagram-v2/.test(txt); }, "detector"); var loader15 = /* @__PURE__ */ __name(async () => { const { diagram: diagram25 } = await Promise.resolve().then(() => (init_classDiagram_v2(), classDiagram_v2_exports)); return { id: id15, diagram: diagram25 }; }, "loader"); var plugin12 = { id: id15, detector: detector14, loader: loader15 }; var classDetector_V2_default = plugin12; // src/diagrams/state/stateDetector.ts var id16 = "state"; var detector15 = /* @__PURE__ */ __name((txt, config6) => { if (config6?.state?.defaultRenderer === "dagre-wrapper") { return false; } return /^\s*stateDiagram/.test(txt); }, "detector"); var loader16 = /* @__PURE__ */ __name(async () => { const { diagram: diagram25 } = await Promise.resolve().then(() => (init_stateDiagram2(), stateDiagram_exports)); return { id: id16, diagram: diagram25 }; }, "loader"); var plugin13 = { id: id16, detector: detector15, loader: loader16 }; var stateDetector_default = plugin13; // src/diagrams/state/stateDetector-V2.ts var id17 = "stateDiagram"; var detector16 = /* @__PURE__ */ __name((txt, config6) => { if (/^\s*stateDiagram-v2/.test(txt)) { return true; } if (/^\s*stateDiagram/.test(txt) && config6?.state?.defaultRenderer === "dagre-wrapper") { return true; } return false; }, "detector"); var loader17 = /* @__PURE__ */ __name(async () => { const { diagram: diagram25 } = await Promise.resolve().then(() => (init_stateDiagram_v2(), stateDiagram_v2_exports)); return { id: id17, diagram: diagram25 }; }, "loader"); var plugin14 = { id: id17, detector: detector16, loader: loader17 }; var stateDetector_V2_default = plugin14; // src/diagrams/user-journey/journeyDetector.ts var id18 = "journey"; var detector17 = /* @__PURE__ */ __name((txt) => { return /^\s*journey/.test(txt); }, "detector"); var loader18 = /* @__PURE__ */ __name(async () => { const { diagram: diagram25 } = await Promise.resolve().then(() => (init_journeyDiagram(), journeyDiagram_exports)); return { id: id18, diagram: diagram25 }; }, "loader"); var plugin15 = { id: id18, detector: detector17, loader: loader18 }; var journeyDetector_default = plugin15; // src/diagrams/error/errorRenderer.ts init_logger(); init_selectSvgElement(); init_setupGraphViewbox(); var draw16 = /* @__PURE__ */ __name((_text, id28, version4) => { log.debug("rendering svg for syntax error\n"); const svg = selectSvgElement(id28); const g2 = svg.append("g"); svg.attr("viewBox", "0 0 2412 512"); configureSvgSize(svg, 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 ${version4}`); }, "draw"); var renderer3 = { draw: draw16 }; var errorRenderer_default = renderer3; // src/diagrams/error/errorDiagram.ts var diagram17 = { db: {}, renderer: renderer3, parser: { parse: /* @__PURE__ */ __name(() => { return; }, "parse") } }; var errorDiagram_default = diagram17; // src/diagrams/flowchart/elk/detector.ts var id19 = "flowchart-elk"; var detector18 = /* @__PURE__ */ __name((txt, config6 = {}) => { 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) && config6?.flowchart?.defaultRenderer === "elk" ) { config6.layout = "elk"; return true; } return false; }, "detector"); var loader19 = /* @__PURE__ */ __name(async () => { const { diagram: diagram25 } = await Promise.resolve().then(() => (init_flowDiagram(), flowDiagram_exports)); return { id: id19, diagram: diagram25 }; }, "loader"); var plugin16 = { id: id19, detector: detector18, loader: loader19 }; var detector_default = plugin16; // src/diagrams/timeline/detector.ts var id20 = "timeline"; var detector19 = /* @__PURE__ */ __name((txt) => { return /^\s*timeline/.test(txt); }, "detector"); var loader20 = /* @__PURE__ */ __name(async () => { const { diagram: diagram25 } = await Promise.resolve().then(() => (init_timeline_definition(), timeline_definition_exports)); return { id: id20, diagram: diagram25 }; }, "loader"); var plugin17 = { id: id20, detector: detector19, loader: loader20 }; var detector_default2 = plugin17; // src/diagrams/mindmap/detector.ts var id22 = "mindmap"; var detector20 = /* @__PURE__ */ __name((txt) => { return /^\s*mindmap/.test(txt); }, "detector"); var loader21 = /* @__PURE__ */ __name(async () => { const { diagram: diagram25 } = await Promise.resolve().then(() => (init_mindmap_definition(), mindmap_definition_exports)); return { id: id22, diagram: diagram25 }; }, "loader"); var plugin18 = { id: id22, detector: detector20, loader: loader21 }; var detector_default3 = plugin18; // src/diagrams/kanban/detector.ts var id23 = "kanban"; var detector21 = /* @__PURE__ */ __name((txt) => { return /^\s*kanban/.test(txt); }, "detector"); var loader22 = /* @__PURE__ */ __name(async () => { const { diagram: diagram25 } = await Promise.resolve().then(() => (init_kanban_definition(), kanban_definition_exports)); return { id: id23, diagram: diagram25 }; }, "loader"); var plugin19 = { id: id23, detector: detector21, loader: loader22 }; var detector_default4 = plugin19; // src/diagrams/sankey/sankeyDetector.ts var id24 = "sankey"; var detector22 = /* @__PURE__ */ __name((txt) => { return /^\s*sankey-beta/.test(txt); }, "detector"); var loader23 = /* @__PURE__ */ __name(async () => { const { diagram: diagram25 } = await Promise.resolve().then(() => (init_sankeyDiagram(), sankeyDiagram_exports)); return { id: id24, diagram: diagram25 }; }, "loader"); var plugin20 = { id: id24, detector: detector22, loader: loader23 }; var sankeyDetector_default = plugin20; // src/diagrams/packet/detector.ts var id25 = "packet"; var detector23 = /* @__PURE__ */ __name((txt) => { return /^\s*packet-beta/.test(txt); }, "detector"); var loader24 = /* @__PURE__ */ __name(async () => { const { diagram: diagram25 } = await Promise.resolve().then(() => (init_diagram(), diagram_exports)); return { id: id25, diagram: diagram25 }; }, "loader"); var packet = { id: id25, detector: detector23, loader: loader24 }; // src/diagrams/block/blockDetector.ts var id26 = "block"; var detector24 = /* @__PURE__ */ __name((txt) => { return /^\s*block-beta/.test(txt); }, "detector"); var loader25 = /* @__PURE__ */ __name(async () => { const { diagram: diagram25 } = await Promise.resolve().then(() => (init_blockDiagram(), blockDiagram_exports)); return { id: id26, diagram: diagram25 }; }, "loader"); var plugin21 = { id: id26, detector: detector24, loader: loader25 }; var blockDetector_default = plugin21; // src/diagrams/architecture/architectureDetector.ts var id27 = "architecture"; var detector25 = /* @__PURE__ */ __name((txt) => { return /^\s*architecture/.test(txt); }, "detector"); var loader26 = /* @__PURE__ */ __name(async () => { const { diagram: diagram25 } = await Promise.resolve().then(() => (init_architectureDiagram(), architectureDiagram_exports)); return { id: id27, diagram: diagram25 }; }, "loader"); var architecture = { id: id27, detector: detector25, loader: loader26 }; var architectureDetector_default = architecture; // src/diagram-api/diagram-orchestration.ts init_detectType(); init_diagramAPI(); var hasLoadedDiagrams = false; var addDiagrams = /* @__PURE__ */ __name(() => { if (hasLoadedDiagrams) { return; } hasLoadedDiagrams = true; registerDiagram("error", errorDiagram_default, (text3) => { return text3.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 }, (text3) => { return text3.toLowerCase().trimStart().startsWith("---"); } ); registerLazyLoadedDiagrams( c4Detector_default, detector_default4, classDetector_V2_default, classDetector_default, erDetector_default, ganttDetector_default, info, pie, requirementDetector_default, sequenceDetector_default, detector_default, flowDetector_v2_default, flowDetector_default, detector_default3, detector_default2, gitGraphDetector_default, stateDetector_V2_default, stateDetector_default, journeyDetector_default, quadrantDetector_default, sankeyDetector_default, packet, xychartDetector_default, blockDetector_default, architectureDetector_default ); }, "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: detector26, loader: loader27 }]) => { if (loader27) { try { getDiagram(key); } catch { try { const { diagram: diagram25, id: id28 } = await loader27(); registerDiagram(id28, diagram25, detector26); } 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/[email protected]/node_modules/stylis/src/Enum.js var COMMENT = "comm"; var RULESET = "rule"; var DECLARATION = "decl"; var IMPORT = "@import"; var KEYFRAMES = "@keyframes"; var LAYER = "@layer"; // ../../node_modules/.pnpm/[email protected]/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/[email protected]/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 caret2() { return position4; } __name(caret2, "caret"); function slice4(begin, end2) { return substr(characters, begin, end2); } __name(slice4, "slice"); function token(type3) { switch (type3) { case 0: case 9: case 10: case 13: case 32: return 5; case 33: case 43: case 44: case 47: case 62: case 64: case 126: case 59: case 123: case 125: return 4; case 58: return 3; case 34: case 39: case 40: case 91: return 2; case 41: case 93: return 1; } return 0; } __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, delimiter2(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, count) { while (--count && next2()) if (character < 48 || character > 102 || character > 57 && character < 65 || character > 70 && character < 97) break; return slice4(index, caret2() + (count < 6 && peek() == 32 && next2() == 32)); } __name(escaping, "escaping"); function delimiter2(type3) { while (next2()) switch (character) { case type3: return position4; case 34: case 39: if (type3 !== 34 && type3 !== 39) delimiter2(character); break; case 40: if (type3 === 41) delimiter2(type3); break; case 92: next2(); break; } return position4; } __name(delimiter2, "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/[email protected]/node_modules/stylis/src/Parser.js function compile(value2) { return dealloc(parse5("", null, null, null, [""], value2 = alloc(value2), 0, [0], value2)); } __name(compile, "compile"); function parse5(value2, root4, parent4, rule, rules, rulesets, pseudo, points, declarations) { var index = 0; var offset = 0; var length2 = pseudo; var atrule = 0; var property2 = 0; var previous = 0; var variable = 1; var scanning = 1; var ampersand = 1; var character2 = 0; var type3 = ""; var props = rules; 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; case 9: case 10: case 13: case 32: characters2 += whitespace(previous); break; case 92: characters2 += escaping(caret2() - 1, 7); continue; case 47: switch (peek()) { case 42: case 47: append2(comment(commenter(next2(), caret2()), 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; case 125 * variable: case 59: case 0: switch (character2) { case 0: case 125: scanning = 0; case 59 + offset: if (ampersand == -1) characters2 = replace(characters2, /\f/g, ""); if (property2 > 0 && (strlen(characters2) - length2 || variable === 0 && previous === 47)) append2(property2 > 32 ? declaration(characters2 + ";", rule, parent4, length2 - 1, declarations) : declaration(replace(characters2, " ", "") + ";", rule, parent4, length2 - 2, declarations), declarations); break; case 59: characters2 += ";"; default: append2(reference = ruleset(characters2, root4, parent4, index, offset, rules, points, type3, props = [], children2 = [], length2, rulesets), rulesets); if (character2 === 123) if (offset === 0) parse5(characters2, root4, reference, reference, props, rulesets, length2, points, children2); else switch (atrule === 99 && charat(characters2, 3) === 110 ? 100 : atrule) { case 100: case 108: case 109: case 115: parse5(value2, reference, reference, rule && append2(ruleset(value2, reference, reference, 0, 0, rules, points, type3, rules, props = [], length2, children2), children2), rules, children2, length2, points, rule ? props : children2); break; default: parse5(characters2, reference, reference, reference, [""], children2, 0, points, children2); } } index = offset = property2 = 0, variable = ampersand = 1, type3 = characters2 = "", length2 = pseudo; break; case 58: length2 = 1 + strlen(characters2), property2 = 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(caret2())), character2++; break; case 45: if (previous === 45 && strlen(characters2) == 2) variable = 0; } } return rulesets; } __name(parse5, "parse"); function ruleset(value2, root4, parent4, index, offset, rules, points, type3, props, children2, length2, siblings2) { var post = offset - 1; var rule = offset === 0 ? rules : [""]; var size5 = sizeof(rule); for (var i2 = 0, j2 = 0, k2 = 0; i2 < index; ++i2) for (var x5 = 0, y5 = substr(value2, post + 1, post = abs3(j2 = points[i2])), z2 = value2; x5 < size5; ++x5) if (z2 = trim(j2 > 0 ? rule[x5] + " " + y5 : replace(y5, /&\f/g, rule[x5]))) props[k2++] = z2; 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/[email protected]/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 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"); // src/mermaidAPI.ts var import_dompurify2 = __toESM(require_purify(), 1); init_isEmpty(); init_package(); // src/accessibility.ts var SVG_ROLE = "graphics-document document"; function setA11yDiagramInfo(svg, diagramType) { svg.attr("role", SVG_ROLE); if (diagramType !== "") { svg.attr("aria-roledescription", diagramType); } } __name(setA11yDiagramInfo, "setA11yDiagramInfo"); function addSVGa11yTitleDescription(svg, a11yTitle, a11yDesc, baseId) { if (svg.insert === void 0) { return; } if (a11yDesc) { const descId = `chart-desc-${baseId}`; svg.attr("aria-describedby", descId); svg.insert("desc", ":first-child").attr("id", descId).text(a11yDesc); } if (a11yTitle) { const titleId = `chart-title-${baseId}`; svg.attr("aria-labelledby", titleId); svg.insert("title", ":first-child").attr("id", titleId).text(a11yTitle); } } __name(addSVGa11yTitleDescription, "addSVGa11yTitleDescription"); // src/mermaidAPI.ts init_assignWithDepth(); init_config(); // src/Diagram.ts init_config(); init_diagramAPI(); init_detectType(); init_errors(); init_utils2(); var Diagram = class _Diagram { constructor(type3, text3, db9, parser23, renderer8) { this.type = type3; this.text = text3; this.db = db9; this.parser = parser23; this.renderer = renderer8; } static { __name(this, "Diagram"); } static async fromText(text3, metadata = {}) { const config6 = getConfig(); const type3 = detectType(text3, config6); text3 = encodeEntities(text3) + "\n"; try { getDiagram(type3); } catch { const loader27 = getDiagramLoader(type3); if (!loader27) { throw new UnknownDiagramError(`Diagram ${type3} not found.`); } const { id: id28, diagram: diagram25 } = await loader27(); registerDiagram(id28, diagram25); } const { db: db9, parser: parser23, renderer: renderer8, init: init3 } = getDiagram(type3); if (parser23.parser) { parser23.parser.yy = db9; } db9.clear?.(); init3?.(config6); if (metadata.title) { db9.setDiagramTitle?.(metadata.title); } await parser23.parse(text3); return new _Diagram(type3, text3, db9, parser23, renderer8); } async render(id28, version4) { await this.renderer.draw(this.text, id28, version4, 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((f3) => { f3(); }); interactionFunctions = []; }, "attachFunctions"); // src/mermaidAPI.ts init_logger(); // src/diagram-api/comments.ts var cleanupComments = /* @__PURE__ */ __name((text3) => { return text3.replace(/^\s*%%(?!{)[^\n]+\n?/gm, "").trimStart(); }, "cleanupComments"); // src/diagram-api/frontmatter.ts init_regexes(); init_js_yaml(); function extractFrontMatter(text3) { const matches33 = text3.match(frontMatterRegex); if (!matches33) { return { text: text3, metadata: {} }; } let parsed = load(matches33[1], { // 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: text3.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, (match2, tag2, attributes) => "<" + tag2 + attributes.replace(/="([^"]*)"/g, "='$1'") + ">" ); }, "cleanupText"); var processFrontmatter = /* @__PURE__ */ __name((code) => { const { text: text3, metadata } = extractFrontMatter(code); const { displayMode: displayMode2, title: title2, config: config6 = {} } = metadata; if (displayMode2) { if (!config6.gantt) { config6.gantt = {}; } config6.gantt.displayMode = displayMode2; } return { title: title2, config: config6, text: text3 }; }, "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 config6 = cleanAndMerge(frontMatterResult.config, directiveResult.directive); code = cleanupComments(directiveResult.text); return { code, title: frontMatterResult.title, config: config6 }; } __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 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(text3) { const processed2 = preprocessDiagram(text3); reset(); addDirective(processed2.config ?? {}); return processed2; } __name(processAndSetConfigs, "processAndSetConfigs"); async function parse6(text3, parseOptions) { addDiagrams(); try { const { code, config: config6 } = processAndSetConfigs(text3); const diagram25 = await getDiagramFromText(code); return { diagramType: diagram25.type, config: config6 }; } catch (error3) { if (parseOptions?.suppressErrors) { return false; } throw error3; } } __name(parse6, "parse"); var cssImportantStyles = /* @__PURE__ */ __name((cssClass, element3, cssClasses = []) => { return ` .${cssClass} ${element3} { ${cssClasses.join(" !important; ")} !important; }`; }, "cssImportantStyles"); var createCssStyles = /* @__PURE__ */ __name((config6, classDefs = /* @__PURE__ */ new Map()) => { let cssStyles = ""; if (config6.themeCSS !== void 0) { cssStyles += ` ${config6.themeCSS}`; } if (config6.fontFamily !== void 0) { cssStyles += ` :root { --mermaid-font-family: ${config6.fontFamily}}`; } if (config6.altFontFamily !== void 0) { cssStyles += ` :root { --mermaid-alt-font-family: ${config6.altFontFamily}}`; } if (classDefs instanceof Map) { const htmlLabels = config6.htmlLabels ?? config6.flowchart?.htmlLabels; const cssHtmlElements = ["> *", "span"]; const cssShapeElements = ["rect", "polygon", "ellipse", "circle", "path"]; const cssElements = htmlLabels ? cssHtmlElements : cssShapeElements; classDefs.forEach((styleClassDef) => { if (!isEmpty_default(styleClassDef.styles)) { cssElements.forEach((cssElement) => { cssStyles += cssImportantStyles(styleClassDef.id, cssElement, styleClassDef.styles); }); } if (!isEmpty_default(styleClassDef.textStyles)) { cssStyles += cssImportantStyles( styleClassDef.id, "tspan", (styleClassDef?.textStyles || []).map((s2) => s2.replace("color", "fill")) ); } }); } return cssStyles; }, "createCssStyles"); var createUserStyles = /* @__PURE__ */ __name((config6, graphType, classDefs, svgId) => { const userCSSstyles = createCssStyles(config6, classDefs); const allStyles = styles_default(graphType, userCSSstyles, config6.themeVariables); return serialize(compile(`${svgId}{${allStyles}}`), stringify); }, "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(/
    /g, "
    "); 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(`${svgCode}`); return ``; }, "putIntoIFrame"); var appendDivSvgG = /* @__PURE__ */ __name((parentRoot, id28, 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", id28).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, id28, divId, iFrameId) => { doc.getElementById(id28)?.remove(); doc.getElementById(divId)?.remove(); doc.getElementById(iFrameId)?.remove(); }, "removeExistingElements"); var render5 = /* @__PURE__ */ __name(async function(id28, text3, svgContainingElement) { addDiagrams(); const processed2 = processAndSetConfigs(text3); text3 = processed2.code; const config6 = getConfig(); log.debug(config6); if (text3.length > (config6?.maxTextSize ?? MAX_TEXTLENGTH)) { text3 = MAX_TEXTLENGTH_EXCEEDED_MSG; } const idSelector = "#" + id28; const iFrameID = "i" + id28; const iFrameID_selector = "#" + iFrameID; const enclosingDivID = "d" + id28; 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("body"); const isSandboxed = config6.securityLevel === SECURITY_LVL_SANDBOX; const isLooseSecurityLevel = config6.securityLevel === SECURITY_LVL_LOOSE; const fontFamily = config6.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, id28, enclosingDivID, `font-family: ${fontFamily}`, XMLNS_XLINK_STD); } else { removeExistingElements(document, id28, enclosingDivID, iFrameID); if (isSandboxed) { const iframe = sandboxedIframe(select_default2("body"), iFrameID); root4 = select_default2(iframe.nodes()[0].contentDocument.body); root4.node().style.margin = 0; } else { root4 = select_default2("body"); } appendDivSvgG(root4, id28, enclosingDivID); } let diag; let parseEncounteredException; try { diag = await Diagram.fromText(text3, { title: processed2.title }); } catch (error3) { if (config6.suppressErrorRendering) { removeTempElements(); throw error3; } diag = await Diagram.fromText("error"); parseEncounteredException = error3; } const element3 = root4.select(enclosingDivID_selector).node(); const diagramType = diag.type; const svg = element3.firstChild; const firstChild = svg.firstChild; const diagramClassDefs = diag.renderer.getClasses?.(text3, diag); const rules = createUserStyles(config6, diagramType, diagramClassDefs, idSelector); const style1 = document.createElement("style"); style1.innerHTML = rules; svg.insertBefore(style1, firstChild); try { await diag.renderer.draw(text3, id28, version2, diag); } catch (e3) { if (config6.suppressErrorRendering) { removeTempElements(); } else { errorRenderer_default.draw(text3, id28, version2); } 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="${id28}"]`).selectAll("foreignobject > *").attr("xmlns", XMLNS_XHTML_STD); let svgCode = root4.select(enclosingDivID_selector).node().innerHTML; log.debug("config.arrowMarkerAbsolute", config6.arrowMarkerAbsolute); svgCode = cleanUpSvgCode(svgCode, isSandboxed, evaluate(config6.arrowMarkerAbsolute)); if (isSandboxed) { const svgEl = root4.select(enclosingDivID_selector + " svg").node(); svgCode = putIntoIFrame(svgCode, svgEl); } else if (!isLooseSecurityLevel) { svgCode = import_dompurify2.default.sanitize(svgCode, { ADD_TAGS: DOMPURIFY_TAGS, ADD_ATTR: DOMPURIFY_ATTR }); } attachFunctions(); if (parseEncounteredException) { throw parseEncounteredException; } removeTempElements(); return { diagramType, svg: svgCode, bindFunctions: diag.db.bindFunctions }; }, "render"); function initialize(userOptions = {}) { const options3 = assignWithDepth_default({}, userOptions); if (options3?.fontFamily && !options3.themeVariables?.fontFamily) { if (!options3.themeVariables) { options3.themeVariables = {}; } options3.themeVariables.fontFamily = options3.fontFamily; } saveConfigFromInitialize(options3); if (options3?.theme && options3.theme in themes_default) { options3.themeVariables = themes_default[options3.theme].getThemeVariables( options3.themeVariables ); } else if (options3) { options3.themeVariables = themes_default.default.getThemeVariables(options3.themeVariables); } const config6 = typeof options3 === "object" ? setSiteConfig(options3) : getSiteConfig(); setLogLevel(config6.logLevel); addDiagrams(); } __name(initialize, "initialize"); var getDiagramFromText = /* @__PURE__ */ __name((text3, metadata = {}) => { const { code } = preprocessDiagram(text3); 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: render5, parse: parse6, getDiagramFromText, initialize, getConfig, setConfig, getSiteConfig, updateSiteConfig, reset: /* @__PURE__ */ __name(() => { reset(); }, "reset"), globalReset: /* @__PURE__ */ __name(() => { reset(defaultConfig); }, "globalReset"), defaultConfig }); setLogLevel(getConfig().logLevel); reset(getConfig()); // src/mermaid.ts init_render(); 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(options3 = { querySelector: ".mermaid" }) { try { await runThrowsErrors(options3); } catch (e3) { if (isDetailedError(e3)) { log.error(e3.str); } if (mermaid.parseError) { mermaid.parseError(e3); } if (!options3.suppressErrors) { log.error("Use the suppressErrors option to suppress these errors"); throw e3; } } }, "run"); var runThrowsErrors = /* @__PURE__ */ __name(async function({ postRenderCallback, querySelector, nodes: nodes7 } = { querySelector: ".mermaid" }) { const conf7 = mermaidAPI.getConfig(); log.debug(`${!postRenderCallback ? "No " : ""}Callback function found`); let nodesToProcess; if (nodes7) { nodesToProcess = nodes7; } else if (querySelector) { nodesToProcess = document.querySelectorAll(querySelector); } else { throw new Error("Nodes and querySelector are both undefined"); } log.debug(`Found ${nodesToProcess.length} diagrams`); if (conf7?.startOnLoad !== void 0) { log.debug("Start On Load: " + conf7?.startOnLoad); mermaidAPI.updateSiteConfig({ startOnLoad: conf7?.startOnLoad }); } const idGenerator = new utils_default2.InitIDGenerator(conf7.deterministicIds, conf7.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 id28 = `mermaid-${idGenerator.next()}`; txt = element3.innerHTML; txt = dedent(utils_default2.entityDecode(txt)).trim().replace(//gi, "
    "); const init3 = utils_default2.detectInit(txt); if (init3) { log.debug("Detected early reinit: ", init3); } try { const { svg, bindFunctions: bindFunctions4 } = await render6(id28, txt, element3); element3.innerHTML = svg; if (postRenderCallback) { await postRenderCallback(id28); } if (bindFunctions4) { bindFunctions4(element3); } } catch (error3) { handleError(error3, errors, mermaid.parseError); } } if (errors.length > 0) { throw errors[0]; } }, "runThrowsErrors"); var initialize2 = /* @__PURE__ */ __name(function(config6) { mermaidAPI.initialize(config6); }, "initialize"); var init2 = /* @__PURE__ */ __name(async function(config6, nodes7, callback) { log.warn("mermaid.init is deprecated. Please use run instead."); if (config6) { initialize2(config6); } const runOptions = { postRenderCallback: callback, querySelector: ".mermaid" }; if (typeof nodes7 === "string") { runOptions.querySelector = nodes7; } else if (nodes7) { if (nodes7 instanceof HTMLElement) { runOptions.nodes = [nodes7]; } else { runOptions.nodes = nodes7; } } 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 f3 = executionQueue.shift(); if (f3) { try { await f3(); } catch (e3) { log.error("Error executing queue", e3); } } } executionQueueRunning = false; }, "executeQueue"); var parse7 = /* @__PURE__ */ __name(async (text3, parseOptions) => { return new Promise((resolve3, reject3) => { const performCall = /* @__PURE__ */ __name(() => new Promise((res, rej) => { mermaidAPI.parse(text3, parseOptions).then( (r2) => { res(r2); resolve3(r2); }, (e3) => { log.error("Error parsing", e3); mermaid.parseError?.(e3); rej(e3); reject3(e3); } ); }), "performCall"); executionQueue.push(performCall); executeQueue().catch(reject3); }); }, "parse"); var render6 = /* @__PURE__ */ __name((id28, text3, container2) => { return new Promise((resolve3, reject3) => { const performCall = /* @__PURE__ */ __name(() => new Promise((res, rej) => { mermaidAPI.render(id28, text3, container2).then( (r2) => { res(r2); resolve3(r2); }, (e3) => { log.error("Error parsing", e3); mermaid.parseError?.(e3); rej(e3); reject3(e3); } ); }), "performCall"); executionQueue.push(performCall); executeQueue().catch(reject3); }); }, "render"); var mermaid = { startOnLoad: true, mermaidAPI, parse: parse7, render: render6, init: init2, run: run4, registerExternalDiagrams, registerLayoutLoaders, initialize: initialize2, parseError: void 0, contentLoaded, setParseErrorHandler, detectType, registerIconPacks }; var mermaid_default = mermaid; return __toCommonJS(mermaid_exports); })(); /*! Check if previously processed */ /*! * Wait for document loaded before starting the execution */ /*! Bundled license information: dompurify/dist/purify.js: (*! @license DOMPurify 3.1.6 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.1.6/LICENSE *) js-yaml/dist/js-yaml.mjs: (*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT *) lodash-es/lodash.js: (** * @license * Lodash (Custom Build) * Build: `lodash modularize exports="es" -o ./` * Copyright OpenJS Foundation and other contributors * Released under MIT license * Based on Underscore.js 1.8.3 * 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.default;




    © 2015 - 2024 Weber Informatics LLC | Privacy Policy