You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@answer.apache.org by gi...@apache.org on 2023/12/05 03:07:45 UTC
(incubator-answer-website) branch dist-pages updated: deploy: 11e791f1518dac714a3a38f68299b283a066e76d
This is an automated email from the ASF dual-hosted git repository.
github-bot pushed a commit to branch dist-pages
in repository https://gitbox.apache.org/repos/asf/incubator-answer-website.git
The following commit(s) were added to refs/heads/dist-pages by this push:
new e246e9a4 deploy: 11e791f1518dac714a3a38f68299b283a066e76d
e246e9a4 is described below
commit e246e9a403ee8d58e63c1d3d5638d292df7105a8
Author: fenbox <fe...@users.noreply.github.com>
AuthorDate: Tue Dec 5 03:07:40 2023 +0000
deploy: 11e791f1518dac714a3a38f68299b283a066e76d
---
404.html | 7 +-
.../{styles.ed57e243.css => styles.2252c3e0.css} | 2 +-
assets/js/01a85c17.6709a49d.js | 1 +
assets/js/01a85c17.dc01e24d.js | 1 -
assets/js/02c33ff0.91b19268.js | 1 +
assets/js/02c33ff0.f4115ef6.js | 1 -
assets/js/03514ddd.297d85b4.js | 1 -
assets/js/03514ddd.cce70ef0.js | 1 +
assets/js/0480b142.5107a232.js | 1 -
assets/js/0480b142.7af46686.js | 1 +
assets/js/05610178.934f3b39.js | 1 +
assets/js/05610178.a9b5b5bd.js | 1 -
assets/js/062dea8c.2f3c8045.js | 1 -
assets/js/062dea8c.3fa5f94b.js | 1 +
assets/js/0da7f6a0.422ef028.js | 1 -
assets/js/0da7f6a0.675e88c1.js | 1 +
assets/js/1008.647e7b10.js | 1 +
assets/js/1061.13037890.js | 1 -
assets/js/1061.4180c433.js | 1 +
assets/js/10bf9f7e.70561871.js | 1 -
assets/js/10bf9f7e.c877fd25.js | 1 +
assets/js/11488796.7976b572.js | 1 -
assets/js/11488796.eff1bc38.js | 1 +
.../{115e91bb.1c47d4f3.js => 115e91bb.f489b108.js} | 2 +-
.../{124add8d.2c77128a.js => 124add8d.0f18ad53.js} | 2 +-
assets/js/1300.4c852510.js | 1 +
assets/js/14790698.08e9b9f1.js | 1 -
assets/js/14790698.d3c5ee88.js | 1 +
assets/js/1516.94768e46.js | 1 +
assets/js/1620c6a0.b6eda198.js | 1 -
assets/js/1620c6a0.f2ff92a1.js | 1 +
assets/js/16ab27aa.0f88726c.js | 1 -
assets/js/16ab27aa.53e462d3.js | 1 +
assets/js/1711.136f6393.js | 2 +
assets/js/1711.136f6393.js.LICENSE.txt | 18 +
assets/js/17896441.8c9963e3.js | 1 +
assets/js/17896441.cef8c140.js | 1 -
assets/js/18e919bd.7a26740c.js | 1 -
assets/js/18e919bd.b7464676.js | 1 +
assets/js/1a4e3797.43bebe37.js | 2 +
...ICENSE.txt => 1a4e3797.43bebe37.js.LICENSE.txt} | 0
assets/js/1a4e3797.b95b0d3c.js | 2 -
assets/js/1a8837ce.7df6a414.js | 1 +
assets/js/1a8837ce.cb743f07.js | 1 -
.../{299281dd.0f5bdbd5.js => 1d2644f4.2814b2f8.js} | 2 +-
assets/js/1df93b7f.1e2cbef9.js | 1 +
assets/js/1df93b7f.1ff749f4.js | 1 -
assets/js/20219bd7.4376cf61.js | 1 -
assets/js/20219bd7.9c4f0e65.js | 1 +
assets/js/227.646ebd22.js | 1 +
assets/js/2449.f473e051.js | 2 +
assets/js/2449.f473e051.js.LICENSE.txt | 9 +
assets/js/2669.67104145.js | 1 +
assets/js/2697.7e8d8a38.js | 1 +
assets/js/26f4acbe.0d095176.js | 1 -
assets/js/26f4acbe.61eebf15.js | 1 +
assets/js/298.f8893466.js | 1 +
.../{1d2644f4.9379a198.js => 299281dd.01026900.js} | 2 +-
assets/js/2a510483.53a39e64.js | 2 -
assets/js/2a510483.9266a796.js | 2 +
...ICENSE.txt => 2a510483.9266a796.js.LICENSE.txt} | 0
assets/js/2c22be1c.31b3483a.js | 2 +
...ICENSE.txt => 2c22be1c.31b3483a.js.LICENSE.txt} | 0
assets/js/2c22be1c.4619767f.js | 2 -
assets/js/2d1855c3.6641be04.js | 1 +
assets/js/2d1855c3.c993c13a.js | 1 -
assets/js/306a8c6c.14517cd0.js | 1 -
assets/js/306a8c6c.42682ae9.js | 1 +
assets/js/3093.33e255c3.js | 1 +
assets/js/310.14ee915c.js | 3429 ++
assets/js/3196ea8f.071ad6a7.js | 1 -
.../{115e91bb.1c47d4f3.js => 3196ea8f.4a19d2ad.js} | 2 +-
assets/js/3198.6f9adc87.js | 1 +
assets/js/32.97fad14b.js | 10780 ++++
assets/js/330.7515ce27.js | 2 +
....js.LICENSE.txt => 330.7515ce27.js.LICENSE.txt} | 0
assets/js/330.e033f7f6.js | 2 -
assets/js/33dc0c0c.0a59152a.js | 1 +
assets/js/33dc0c0c.e23e4ce4.js | 1 -
assets/js/3410.a246e730.js | 1 +
assets/js/357.760272fa.js | 1320 +
assets/js/3694.93979497.js | 1 +
assets/js/3728301f.72cbfd0a.js | 1 -
assets/js/3728301f.b4ef6f1d.js | 1 +
assets/js/3880.a412433e.js | 1 +
assets/js/3a3fadac.549b655b.js | 1 -
assets/js/3a3fadac.8bfb46d3.js | 1 +
assets/js/3a86a8c5.25475b8d.js | 2 +
...ICENSE.txt => 3a86a8c5.25475b8d.js.LICENSE.txt} | 0
assets/js/3a86a8c5.394117e5.js | 2 -
assets/js/3b49c9a9.1d660c2c.js | 1 +
assets/js/3b49c9a9.c2f73029.js | 1 -
assets/js/3e1d0064.68989eea.js | 1 -
assets/js/3e1d0064.89b543e5.js | 1 +
.../{115e91bb.1c47d4f3.js => 3f1a2b9e.2d1c2ef5.js} | 2 +-
assets/js/3f1a2b9e.4803570f.js | 1 -
assets/js/415707e9.e7d633f9.js | 1 +
assets/js/422.e7052dec.js | 2600 +
assets/js/422a2e8a.1c1d342a.js | 1 -
assets/js/422a2e8a.cd4bf663.js | 1 +
assets/js/423.89d88c7e.js | 10323 ++++
assets/js/449.a598088d.js | 50986 +++++++++++++++++++
assets/js/489.b280ee59.js | 23570 +++++++++
assets/js/4a31998e.31ba3436.js | 1 +
assets/js/4a31998e.365195a4.js | 1 -
assets/js/4d6665af.107b8c01.js | 1 +
assets/js/4d6665af.2f7a399d.js | 1 -
.../{115e91bb.1c47d4f3.js => 4dd6f3f3.ba561242.js} | 2 +-
assets/js/4dd6f3f3.fa78a8c0.js | 1 -
assets/js/4e57de1b.929d3c83.js | 1 +
assets/js/4e57de1b.f67213a8.js | 1 -
assets/js/4e7d9aa5.6175d77a.js | 1 +
assets/js/4e7d9aa5.72834e9f.js | 1 -
assets/js/4edbe7be.476cb13d.js | 1 -
assets/js/4edbe7be.fab23dec.js | 1 +
assets/js/4f8d6d87.00db41dc.js | 1 +
assets/js/4f8d6d87.d1e7b1e4.js | 1 -
assets/js/5.7a6d4c98.js | 1 +
assets/js/5.822c6d59.js | 1227 +
assets/js/50ea1d6e.d48cf615.js | 1 -
.../{115e91bb.1c47d4f3.js => 50ea1d6e.d796e4fa.js} | 2 +-
assets/js/51168d66.12c3d1dc.js | 1 -
assets/js/51168d66.78962f5b.js | 1 +
assets/js/516.0f704221.js | 26575 ++++++++++
assets/js/525.d5635339.js | 10814 ++++
assets/js/5422.a961dbf1.js | 1 +
assets/js/54f44165.1647b9e7.js | 1 -
assets/js/54f44165.9bf17024.js | 1 +
assets/js/5525.5255e838.js | 1 +
assets/js/5846.e79acaf6.js | 1 +
assets/js/5ac42693.09bf3197.js | 1 +
assets/js/5ac42693.b0a5f3a3.js | 1 -
assets/js/5b143ea2.79a2b759.js | 1 -
assets/js/5b143ea2.fb33f961.js | 1 +
assets/js/5b5f4945.7d26bbea.js | 1 +
assets/js/5e744679.75820692.js | 1 -
assets/js/5e744679.e3823e66.js | 1 +
assets/js/5e95c892.67ebe9ad.js | 1 +
assets/js/5e95c892.ed76056a.js | 1 -
assets/js/6032.e67c911c.js | 1 +
assets/js/6199.0a140a2d.js | 2 -
assets/js/6199.fa94ab18.js | 2 +
...js.LICENSE.txt => 6199.fa94ab18.js.LICENSE.txt} | 0
assets/js/643.5c39e096.js | 25919 ++++++++++
assets/js/6489.bc4ebc01.js | 1 +
assets/js/6643.0dbf8676.js | 1 +
assets/js/6685.98383bb2.js | 1 +
assets/js/669.710427ef.js | 1242 +
assets/js/67292bae.28987bdf.js | 1 +
assets/js/67292bae.c19b2164.js | 1 -
assets/js/685.82d4b9a0.js | 1410 +
assets/js/6875c492.307432c0.js | 1 -
assets/js/6875c492.d4b0f58e.js | 1 +
assets/js/68eaa3f5.ade23ed2.js | 1 -
assets/js/68eaa3f5.e09ae9a5.js | 1 +
assets/js/692c6f9f.2092cd3f.js | 1 +
assets/js/692c6f9f.b6ae1bab.js | 1 -
assets/js/694f97a7.7f36ff62.js | 1 -
assets/js/694f97a7.de34547e.js | 1 +
assets/js/697.97d60bb9.js | 739 +
assets/js/6c2fd375.5319531f.js | 1 -
assets/js/6c2fd375.d14d0ee5.js | 1 +
assets/js/6fd9b8bb.014b660d.js | 1 -
assets/js/6fd9b8bb.7c2c35fa.js | 1 +
assets/js/700e44e1.74efae68.js | 1 -
assets/js/700e44e1.e1341e7c.js | 1 +
assets/js/70fd4878.40177910.js | 1 -
assets/js/70fd4878.d8a1376b.js | 1 +
assets/js/7156.870d1e21.js | 2 -
assets/js/7156.870d1e21.js.LICENSE.txt | 8 -
assets/js/72a4391e.bb2d5cd6.js | 1 +
assets/js/72a4391e.fcc7ed41.js | 1 -
assets/js/72f5456f.177d6235.js | 2 +
...ICENSE.txt => 72f5456f.177d6235.js.LICENSE.txt} | 0
assets/js/72f5456f.d7dcdd48.js | 2 -
assets/js/744.95e9770e.js | 10065 ++++
assets/js/746f3bce.3fd4fd56.js | 1 -
assets/js/746f3bce.85b66558.js | 1 +
assets/js/7744.a5b332a3.js | 1 +
assets/js/7762.a8ba1189.js | 1 +
assets/js/7762.bd5f386a.js | 1 -
assets/js/7892.eeacadb8.js | 1 +
assets/js/8.0f1a168f.js | 14570 ++++++
assets/js/814f3328.33880356.js | 1 -
assets/js/814f3328.ec49c621.js | 1 +
assets/js/8310.ee3cef01.js | 1 +
assets/js/83fae6f2.75407341.js | 1 -
assets/js/83fae6f2.c4c4a07b.js | 1 +
assets/js/846.0218453f.js | 2106 +
assets/js/85c04a46.57c4bd7c.js | 1 -
assets/js/85c04a46.aef83882.js | 1 +
assets/js/87260873.34927168.js | 1 -
assets/js/87260873.786c3341.js | 1 +
assets/js/872d4ab4.b0009084.js | 1 +
assets/js/872d4ab4.cacca54e.js | 1 -
assets/js/888a9922.d748a4ac.js | 1 -
assets/js/888a9922.e90c9df2.js | 1 +
assets/js/8908.a6c19329.js | 1 +
assets/js/892.837803ad.js | 1 +
assets/js/892.87df91dd.js | 28262 ++++++++++
assets/js/8992.0472a0ab.js | 1 +
assets/js/8b3a140c.193003d8.js | 2 -
assets/js/8b3a140c.b5595138.js | 2 +
...ICENSE.txt => 8b3a140c.b5595138.js.LICENSE.txt} | 0
assets/js/8bd0f0ed.2e1a0973.js | 1 +
assets/js/8bd0f0ed.613c9b1c.js | 1 -
assets/js/8eb4e46b.4ac21fe1.js | 1 -
assets/js/8eb4e46b.f2a4f4a6.js | 1 +
.../{115e91bb.1c47d4f3.js => 8fd1147e.6bd1541d.js} | 2 +-
assets/js/8fd1147e.be4f6729.js | 1 -
assets/js/908.f74f140d.js | 1758 +
assets/js/93.865c82a7.js | 25876 ++++++++++
assets/js/9357.967dd3dc.js | 1 +
assets/js/935f2afb.710e0275.js | 1 +
assets/js/935f2afb.915b1022.js | 1 -
assets/js/9751.879fbb8a.js | 1 -
assets/js/9751.f364230a.js | 1 +
assets/js/977e6cb2.15250b57.js | 1 -
assets/js/977e6cb2.789084bc.js | 1 +
assets/js/97e49e80.342ccf21.js | 1 +
assets/js/97e49e80.e9e282aa.js | 1 -
assets/js/992.32945d3b.js | 540 +
assets/js/9c055dd5.0f302bfe.js | 1 -
assets/js/9c055dd5.cc2e44d3.js | 1 +
assets/js/9e348dd4.46a25b13.js | 1 +
assets/js/9e348dd4.4870ac42.js | 1 -
assets/js/9e4087bc.774844bb.js | 1 -
assets/js/9e4087bc.93101ad2.js | 1 +
assets/js/a09c2993.84b22bc8.js | 1 +
assets/js/a09c2993.a09e4c56.js | 1 -
assets/js/a4adfb7f.46937fb9.js | 1 -
assets/js/a4adfb7f.e5dedb1b.js | 1 +
assets/js/a5eff934.73fe6ca3.js | 1 -
assets/js/a5eff934.d4d97496.js | 1 +
assets/js/a6aa9e1f.2559dcba.js | 1 -
assets/js/a6aa9e1f.897aa186.js | 1 +
assets/js/a7023ddc.046f2212.js | 1 +
assets/js/a7023ddc.c3f8d43f.js | 1 -
assets/js/a72448b0.5bccfc11.js | 2 -
assets/js/a72448b0.b77ad782.js | 2 +
...ICENSE.txt => a72448b0.b77ad782.js.LICENSE.txt} | 0
assets/js/a7bd4aaa.355191dd.js | 1 +
assets/js/a7bd4aaa.60765541.js | 1 -
assets/js/a94703ab.0447f64a.js | 1 +
assets/js/a94703ab.e7191690.js | 1 -
assets/js/a98c1148.21ec0b51.js | 1 -
assets/js/a98c1148.df7e7243.js | 1 +
assets/js/afdde1df.46f7c3b1.js | 1 -
.../{115e91bb.1c47d4f3.js => afdde1df.c48a3fa2.js} | 2 +-
assets/js/b2b494f3.26358f4b.js | 1 +
assets/js/b2b494f3.a303f1df.js | 1 -
assets/js/b2b675dd.0bde61dc.js | 1 -
assets/js/b2b675dd.702e7e32.js | 1 +
assets/js/b2f554cd.3da16a84.js | 1 -
assets/js/b2f554cd.a3321046.js | 1 +
assets/js/b4d0b0f3.92fe9219.js | 1 +
assets/js/b4d0b0f3.d6c4e859.js | 1 -
assets/js/b5481bd7.41cc0da6.js | 1 +
assets/js/b5481bd7.644c4cb4.js | 1 -
assets/js/b85a59ca.1e9998d3.js | 1 +
assets/js/b85a59ca.a02e19ee.js | 1 -
assets/js/baaea622.34115266.js | 1 -
.../{115e91bb.1c47d4f3.js => baaea622.d790f5a0.js} | 2 +-
assets/js/bb350c59.74b963a7.js | 1 +
assets/js/bb350c59.8b669bbe.js | 1 -
.../{115e91bb.1c47d4f3.js => bfe08e23.b441bb47.js} | 2 +-
assets/js/bfe08e23.b807eeb2.js | 1 -
.../{115e91bb.1c47d4f3.js => c18f1ff5.ba8619d6.js} | 2 +-
assets/js/c18f1ff5.fca75998.js | 1 -
assets/js/c1cb8fca.3ca34912.js | 1 -
assets/js/c1cb8fca.9f4785a1.js | 1 +
assets/js/ccc49370.8f10c90e.js | 1 +
assets/js/ccc49370.cd77ffa6.js | 1 -
assets/js/d0cb6732.2e595c79.js | 1 -
assets/js/d0cb6732.6d0c5d70.js | 1 +
assets/js/d5bcecbd.f962e687.js | 1 +
assets/js/d7d04d1f.35e78ce9.js | 1 +
assets/js/d7d04d1f.d0511ca8.js | 1 -
assets/js/d7ef3cd8.03d76999.js | 1 -
assets/js/d7ef3cd8.7aaee072.js | 1 +
assets/js/d93d657b.4744828c.js | 1 +
assets/js/d93d657b.7cb8aaff.js | 1 -
assets/js/d980d228.8f029ff6.js | 1 -
assets/js/d980d228.e26b292d.js | 1 +
assets/js/da6654f2.21aafa57.js | 1 +
assets/js/da6654f2.338a840b.js | 1 -
assets/js/dc6bcb87.21252307.js | 1 +
assets/js/dc6bcb87.7311e58e.js | 1 -
assets/js/dc8b965f.28ddede4.js | 1 +
.../{d5bcecbd.8f78829f.js => df28f031.5d768b0e.js} | 2 +-
assets/js/df28f031.a69fcdce.js | 1 -
assets/js/e0bd1749.dfaaee7e.js | 1 -
assets/js/e0bd1749.e6b3cb84.js | 1 +
assets/js/e3d60432.955d5a26.js | 1 -
assets/js/e3d60432.e8bd1231.js | 1 +
assets/js/e438ab2a.0cbf3013.js | 1 +
assets/js/e438ab2a.98290278.js | 1 -
assets/js/e4ae456e.7ace0ef0.js | 1 +
assets/js/e4ae456e.a8f1020a.js | 1 -
assets/js/e961213c.2afdf30b.js | 1 +
assets/js/e961213c.f2c7fd47.js | 1 -
assets/js/eafd45de.0e0a8c62.js | 1 +
assets/js/eafd45de.1f3e8edc.js | 1 -
assets/js/eec8feae.6cd56455.js | 1 +
assets/js/eec8feae.bbeef765.js | 1 -
.../{115e91bb.1c47d4f3.js => f14de4fc.8ffe1736.js} | 2 +-
assets/js/f14de4fc.a9f5822d.js | 1 -
assets/js/f45a91b0.4c81afb5.js | 1 -
.../{115e91bb.1c47d4f3.js => f45a91b0.afff2460.js} | 2 +-
assets/js/f493f8eb.5d1d6219.js | 1 -
assets/js/f493f8eb.b1ec2843.js | 1 +
assets/js/f5afcb3e.36cb3bf0.js | 1 -
assets/js/f5afcb3e.73867f0b.js | 1 +
assets/js/f8a2828b.a1739e3e.js | 1 +
assets/js/ffd9127b.1f1a6b94.js | 1 -
assets/js/ffd9127b.4080af69.js | 1 +
assets/js/main.2393da95.js | 2 -
assets/js/main.68396c67.js | 2 +
...js.LICENSE.txt => main.68396c67.js.LICENSE.txt} | 0
assets/js/runtime~main.0568f635.js | 1 +
assets/js/runtime~main.ced68c4d.js | 1 -
blog/2023/05/11/answer-1.0.9-release/index.html | 7 +-
.../index.html | 7 +-
.../index.html | 7 +-
.../index.html | 7 +-
.../index.html | 7 +-
blog/2023/06/15/answer-1.1.0-release/index.html | 7 +-
.../index.html | 7 +-
.../index.html | 7 +-
.../index.html | 7 +-
.../index.html | 7 +-
.../index.html | 7 +-
.../index.html | 7 +-
.../index.html | 7 +-
.../index.html | 7 +-
.../index.html | 7 +-
.../24/answer-enters-apache-incubator/index.html | 7 +-
.../index.html | 7 +-
blog/archive/index.html | 7 +-
blog/category/best-practice/index.html | 7 +-
blog/category/community/index.html | 7 +-
blog/category/insights/index.html | 7 +-
blog/category/release/index.html | 7 +-
blog/category/tech/index.html | 7 +-
blog/category/tutorials/index.html | 7 +-
blog/index.html | 7 +-
blog/page/2/index.html | 7 +-
blog/tags/index.html | 7 +-
blog/tags/tutorials/index.html | 7 +-
community/about/index.html | 9 +-
community/blog-post/index.html | 9 +-
community/contributing/index.html | 9 +-
community/development/index.html | 9 +-
community/how-to-release/index.html | 9 +-
community/index.html | 9 +-
community/issues/index.html | 9 +-
community/plugins/index.html | 9 +-
community/plugins/plugin-config/index.html | 9 +-
community/plugins/plugin-translation/index.html | 9 +-
community/pull-request/index.html | 9 +-
community/translation/index.html | 9 +-
contact/index.html | 7 +-
docs/command-line/index.html | 11 +-
docs/configfile/index.html | 11 +-
docs/database/index.html | 11 +-
docs/env/index.html | 11 +-
docs/faq/index.html | 11 +-
docs/flags/index.html | 16 +-
docs/index.html | 11 +-
docs/installation/index.html | 11 +-
docs/moderation/index.html | 13 +-
docs/notice/index.html | 11 +-
docs/permission/index.html | 11 +-
docs/plugins/index.html | 11 +-
docs/questions/index.html | 20 +
docs/reputation/index.html | 11 +-
docs/review/index.html | 20 +
docs/settings/index.html | 13 +-
docs/tags/index.html | 20 +
docs/upgrade/index.html | 11 +-
docs/users/index.html | 94 +
index.html | 7 +-
plugins/index.html | 7 +-
search/index.html | 7 +-
sitemap.xml | 2 +-
zh-CN/404.html | 7 +-
.../{styles.589af3e3.css => styles.5967b50a.css} | 2 +-
zh-CN/assets/js/01a85c17.6709a49d.js | 1 +
zh-CN/assets/js/01a85c17.dc01e24d.js | 1 -
zh-CN/assets/js/0673bbda.5a94e420.js | 1 +
zh-CN/assets/js/0673bbda.b28832bf.js | 1 -
zh-CN/assets/js/0bbd7524.968f27f2.js | 1 -
zh-CN/assets/js/0bbd7524.dd6a8c6b.js | 1 +
zh-CN/assets/js/0da7f6a0.422ef028.js | 1 -
zh-CN/assets/js/0da7f6a0.675e88c1.js | 1 +
zh-CN/assets/js/0dc50e16.2c264b28.js | 1 -
zh-CN/assets/js/0dc50e16.6d48c9cd.js | 1 +
zh-CN/assets/js/1008.647e7b10.js | 1 +
zh-CN/assets/js/1061.13037890.js | 1 -
zh-CN/assets/js/1061.4180c433.js | 1 +
zh-CN/assets/js/115e91bb.1c47d4f3.js | 1 -
.../assets/js/115e91bb.f489b108.js | 2 +-
.../assets/js/124add8d.0f18ad53.js | 2 +-
zh-CN/assets/js/124add8d.2c77128a.js | 1 -
zh-CN/assets/js/1300.4c852510.js | 1 +
zh-CN/assets/js/1312b5cc.5b32a714.js | 1 -
zh-CN/assets/js/1312b5cc.701ded45.js | 1 +
zh-CN/assets/js/1516.94768e46.js | 1 +
zh-CN/assets/js/15ad2644.006576c4.js | 1 +
zh-CN/assets/js/15ad2644.d595502d.js | 1 -
zh-CN/assets/js/1620c6a0.46a8d136.js | 1 +
zh-CN/assets/js/1620c6a0.a32b4f7f.js | 1 -
zh-CN/assets/js/1669585c.176ea38c.js | 1 -
zh-CN/assets/js/1669585c.b4fc6967.js | 1 +
zh-CN/assets/js/16ab27aa.0f88726c.js | 1 -
zh-CN/assets/js/16ab27aa.53e462d3.js | 1 +
zh-CN/assets/js/1711.136f6393.js | 2 +
zh-CN/assets/js/1711.136f6393.js.LICENSE.txt | 18 +
zh-CN/assets/js/17896441.8c9963e3.js | 1 +
zh-CN/assets/js/17896441.cef8c140.js | 1 -
zh-CN/assets/js/189aa5fb.dfa82717.js | 1 -
zh-CN/assets/js/189aa5fb.f73da96e.js | 1 +
zh-CN/assets/js/18e919bd.7a26740c.js | 1 -
zh-CN/assets/js/18e919bd.b7464676.js | 1 +
zh-CN/assets/js/1a4e3797.43bebe37.js | 2 +
...ICENSE.txt => 1a4e3797.43bebe37.js.LICENSE.txt} | 0
zh-CN/assets/js/1a4e3797.b95b0d3c.js | 2 -
zh-CN/assets/js/1a8837ce.a64198b1.js | 1 -
zh-CN/assets/js/1a8837ce.b843d15e.js | 1 +
.../assets/js/1d2644f4.2814b2f8.js | 2 +-
zh-CN/assets/js/1d2644f4.9379a198.js | 1 -
zh-CN/assets/js/1df93b7f.1e2cbef9.js | 1 +
zh-CN/assets/js/1df93b7f.1ff749f4.js | 1 -
zh-CN/assets/js/1edacfff.1bc480d1.js | 1 -
zh-CN/assets/js/1edacfff.449acbbe.js | 1 +
zh-CN/assets/js/227.646ebd22.js | 1 +
zh-CN/assets/js/2449.f473e051.js | 2 +
zh-CN/assets/js/2449.f473e051.js.LICENSE.txt | 9 +
zh-CN/assets/js/2669.67104145.js | 1 +
zh-CN/assets/js/2697.7e8d8a38.js | 1 +
zh-CN/assets/js/26f4acbe.0d095176.js | 1 -
zh-CN/assets/js/26f4acbe.61eebf15.js | 1 +
zh-CN/assets/js/283536cd.07851b1c.js | 1 +
zh-CN/assets/js/283536cd.5241a7b3.js | 1 -
zh-CN/assets/js/298.f8893466.js | 1 +
.../assets/js/299281dd.01026900.js | 2 +-
zh-CN/assets/js/299281dd.0f5bdbd5.js | 1 -
zh-CN/assets/js/2a510483.61a5890e.js | 2 -
zh-CN/assets/js/2a510483.9df07f5d.js | 2 +
...ICENSE.txt => 2a510483.9df07f5d.js.LICENSE.txt} | 0
zh-CN/assets/js/2c22be1c.31b3483a.js | 2 +
...ICENSE.txt => 2c22be1c.31b3483a.js.LICENSE.txt} | 0
zh-CN/assets/js/2c22be1c.4619767f.js | 2 -
zh-CN/assets/js/306a8c6c.88ebe10e.js | 1 -
zh-CN/assets/js/306a8c6c.c796f972.js | 1 +
zh-CN/assets/js/3093.33e255c3.js | 1 +
zh-CN/assets/js/310.14ee915c.js | 3429 ++
zh-CN/assets/js/3196ea8f.071ad6a7.js | 1 -
.../assets/js/3196ea8f.4a19d2ad.js | 2 +-
zh-CN/assets/js/3198.6f9adc87.js | 1 +
zh-CN/assets/js/32.97fad14b.js | 10780 ++++
zh-CN/assets/js/330.7515ce27.js | 2 +
....js.LICENSE.txt => 330.7515ce27.js.LICENSE.txt} | 0
zh-CN/assets/js/330.e033f7f6.js | 2 -
zh-CN/assets/js/33dc0c0c.0a59152a.js | 1 +
zh-CN/assets/js/33dc0c0c.e23e4ce4.js | 1 -
zh-CN/assets/js/3410.a246e730.js | 1 +
zh-CN/assets/js/357.760272fa.js | 1320 +
zh-CN/assets/js/3694.93979497.js | 1 +
zh-CN/assets/js/3728301f.72cbfd0a.js | 1 -
zh-CN/assets/js/3728301f.b4ef6f1d.js | 1 +
zh-CN/assets/js/3880.a412433e.js | 1 +
zh-CN/assets/js/394aa4f9.3ad36048.js | 1 -
zh-CN/assets/js/394aa4f9.bc5d99b5.js | 1 +
zh-CN/assets/js/3a3fadac.549b655b.js | 1 -
zh-CN/assets/js/3a3fadac.8bfb46d3.js | 1 +
zh-CN/assets/js/3a86a8c5.25475b8d.js | 2 +
...ICENSE.txt => 3a86a8c5.25475b8d.js.LICENSE.txt} | 0
zh-CN/assets/js/3a86a8c5.394117e5.js | 2 -
.../assets/js/3f1a2b9e.2d1c2ef5.js | 2 +-
zh-CN/assets/js/3f1a2b9e.4803570f.js | 1 -
zh-CN/assets/js/415707e9.b7fe0d6a.js | 1 +
zh-CN/assets/js/422.e7052dec.js | 2600 +
zh-CN/assets/js/423.89d88c7e.js | 10323 ++++
zh-CN/assets/js/449.a598088d.js | 50986 +++++++++++++++++++
zh-CN/assets/js/47116eb1.380ea1e4.js | 1 +
zh-CN/assets/js/47116eb1.e4825d29.js | 1 -
zh-CN/assets/js/489.b280ee59.js | 23570 +++++++++
zh-CN/assets/js/4958df33.b703bdd0.js | 1 +
zh-CN/assets/js/4958df33.f3b0ad70.js | 1 -
.../assets/js/4dd6f3f3.ba561242.js | 2 +-
zh-CN/assets/js/4dd6f3f3.fa78a8c0.js | 1 -
zh-CN/assets/js/4fff58e6.1a691645.js | 1 +
zh-CN/assets/js/4fff58e6.e4458960.js | 1 -
zh-CN/assets/js/5.7a6d4c98.js | 1 +
zh-CN/assets/js/5.822c6d59.js | 1227 +
zh-CN/assets/js/50bc71d4.45398c8f.js | 1 -
zh-CN/assets/js/50bc71d4.bf186316.js | 1 +
zh-CN/assets/js/50ea1d6e.d48cf615.js | 1 -
.../assets/js/50ea1d6e.d796e4fa.js | 2 +-
zh-CN/assets/js/516.0f704221.js | 26575 ++++++++++
zh-CN/assets/js/525.d5635339.js | 10814 ++++
zh-CN/assets/js/5422.a961dbf1.js | 1 +
zh-CN/assets/js/5525.5255e838.js | 1 +
zh-CN/assets/js/565f0463.276bc447.js | 1 +
zh-CN/assets/js/565f0463.cbe2e815.js | 1 -
zh-CN/assets/js/5846.e79acaf6.js | 1 +
zh-CN/assets/js/589616dd.68bef586.js | 1 -
zh-CN/assets/js/589616dd.da137047.js | 1 +
zh-CN/assets/js/5ac42693.a0f5b525.js | 1 -
zh-CN/assets/js/5ac42693.b690c11d.js | 1 +
zh-CN/assets/js/5b143ea2.79a2b759.js | 1 -
zh-CN/assets/js/5b143ea2.fb33f961.js | 1 +
zh-CN/assets/js/5b5253e0.2d049c0b.js | 1 +
zh-CN/assets/js/5b5253e0.d934fdd7.js | 1 -
zh-CN/assets/js/5b5f4945.59e9457d.js | 1 +
zh-CN/assets/js/5e744679.483587b6.js | 1 -
zh-CN/assets/js/5e744679.96a4eb19.js | 1 +
zh-CN/assets/js/5e95c892.67ebe9ad.js | 1 +
zh-CN/assets/js/5e95c892.ed76056a.js | 1 -
zh-CN/assets/js/6032.e67c911c.js | 1 +
zh-CN/assets/js/6199.0a140a2d.js | 2 -
zh-CN/assets/js/6199.fa94ab18.js | 2 +
...js.LICENSE.txt => 6199.fa94ab18.js.LICENSE.txt} | 0
zh-CN/assets/js/643.5c39e096.js | 25919 ++++++++++
zh-CN/assets/js/6489.bc4ebc01.js | 1 +
zh-CN/assets/js/6643.0dbf8676.js | 1 +
zh-CN/assets/js/6685.98383bb2.js | 1 +
zh-CN/assets/js/669.710427ef.js | 1242 +
zh-CN/assets/js/685.82d4b9a0.js | 1410 +
zh-CN/assets/js/6875c492.307432c0.js | 1 -
zh-CN/assets/js/6875c492.d4b0f58e.js | 1 +
zh-CN/assets/js/692c6f9f.1f8962a3.js | 1 -
zh-CN/assets/js/692c6f9f.fe52300f.js | 1 +
zh-CN/assets/js/694f97a7.7f36ff62.js | 1 -
zh-CN/assets/js/694f97a7.de34547e.js | 1 +
zh-CN/assets/js/697.97d60bb9.js | 739 +
zh-CN/assets/js/6b66dba1.114831b2.js | 1 -
zh-CN/assets/js/6b66dba1.bd3c86d0.js | 1 +
zh-CN/assets/js/6fd9b8bb.1ae3b0c0.js | 1 -
zh-CN/assets/js/6fd9b8bb.af2c7878.js | 1 +
zh-CN/assets/js/700e44e1.304f8750.js | 1 -
zh-CN/assets/js/700e44e1.397b6cdb.js | 1 +
zh-CN/assets/js/70fd4878.6d09c192.js | 1 -
zh-CN/assets/js/70fd4878.ce459779.js | 1 +
zh-CN/assets/js/7156.870d1e21.js | 2 -
zh-CN/assets/js/7156.870d1e21.js.LICENSE.txt | 8 -
zh-CN/assets/js/719ef308.3cf26707.js | 1 -
zh-CN/assets/js/719ef308.78a7cf7c.js | 1 +
zh-CN/assets/js/72e3e7f9.34f801cf.js | 1 +
zh-CN/assets/js/72e3e7f9.db4e06a4.js | 1 -
zh-CN/assets/js/72f5456f.177d6235.js | 2 +
...ICENSE.txt => 72f5456f.177d6235.js.LICENSE.txt} | 0
zh-CN/assets/js/72f5456f.89c32383.js | 2 -
zh-CN/assets/js/731fb1ee.8ebb92f4.js | 1 +
zh-CN/assets/js/731fb1ee.9b049509.js | 1 -
zh-CN/assets/js/744.95e9770e.js | 10065 ++++
zh-CN/assets/js/7744.a5b332a3.js | 1 +
zh-CN/assets/js/7762.a8ba1189.js | 1 +
zh-CN/assets/js/7762.bd5f386a.js | 1 -
zh-CN/assets/js/7892.eeacadb8.js | 1 +
zh-CN/assets/js/7f220a89.15d6d827.js | 1 -
zh-CN/assets/js/7f220a89.bcfe809e.js | 1 +
zh-CN/assets/js/8.0f1a168f.js | 14570 ++++++
zh-CN/assets/js/808227b4.10b9ad93.js | 1 -
zh-CN/assets/js/808227b4.791bfea5.js | 1 +
zh-CN/assets/js/814f3328.33880356.js | 1 -
zh-CN/assets/js/814f3328.ec49c621.js | 1 +
zh-CN/assets/js/8310.ee3cef01.js | 1 +
zh-CN/assets/js/846.0218453f.js | 2106 +
zh-CN/assets/js/85c04a46.57c4bd7c.js | 1 -
zh-CN/assets/js/85c04a46.aef83882.js | 1 +
zh-CN/assets/js/87260873.34927168.js | 1 -
zh-CN/assets/js/87260873.786c3341.js | 1 +
zh-CN/assets/js/872d4ab4.84927a24.js | 1 +
zh-CN/assets/js/872d4ab4.a284ba73.js | 1 -
zh-CN/assets/js/8908.a6c19329.js | 1 +
zh-CN/assets/js/892.837803ad.js | 1 +
zh-CN/assets/js/892.87df91dd.js | 28262 ++++++++++
zh-CN/assets/js/8992.0472a0ab.js | 1 +
zh-CN/assets/js/8a160ed2.117e9fc2.js | 1 -
zh-CN/assets/js/8a160ed2.55319244.js | 1 +
zh-CN/assets/js/8b3a140c.193003d8.js | 2 -
zh-CN/assets/js/8b3a140c.b5595138.js | 2 +
...ICENSE.txt => 8b3a140c.b5595138.js.LICENSE.txt} | 0
zh-CN/assets/js/8bd0f0ed.07e2c9a0.js | 1 -
zh-CN/assets/js/8bd0f0ed.9d051c2b.js | 1 +
zh-CN/assets/js/8d998be3.53c9a8bd.js | 1 +
zh-CN/assets/js/8d998be3.9033cc95.js | 1 -
.../assets/js/8fd1147e.6bd1541d.js | 2 +-
zh-CN/assets/js/8fd1147e.be4f6729.js | 1 -
zh-CN/assets/js/908.f74f140d.js | 1758 +
zh-CN/assets/js/93.865c82a7.js | 25876 ++++++++++
zh-CN/assets/js/9357.967dd3dc.js | 1 +
zh-CN/assets/js/935f2afb.18485023.js | 1 +
zh-CN/assets/js/935f2afb.c6a0a13e.js | 1 -
zh-CN/assets/js/9751.879fbb8a.js | 1 -
zh-CN/assets/js/9751.f364230a.js | 1 +
zh-CN/assets/js/992.32945d3b.js | 540 +
zh-CN/assets/js/99ef21fa.920ca134.js | 1 +
zh-CN/assets/js/99ef21fa.fda91344.js | 1 -
zh-CN/assets/js/9bc058ac.01982d78.js | 1 -
zh-CN/assets/js/9bc058ac.031de2a9.js | 1 +
zh-CN/assets/js/9cef3031.73a9a167.js | 1 +
zh-CN/assets/js/9cef3031.9ff3e458.js | 1 -
zh-CN/assets/js/9d3d282b.18f227e1.js | 1 +
zh-CN/assets/js/9d3d282b.e4c35a59.js | 1 -
zh-CN/assets/js/9e348dd4.302f620a.js | 1 +
zh-CN/assets/js/9e348dd4.7d6d615e.js | 1 -
zh-CN/assets/js/9e4087bc.774844bb.js | 1 -
zh-CN/assets/js/9e4087bc.93101ad2.js | 1 +
zh-CN/assets/js/9e79e6b4.994f2653.js | 1 -
zh-CN/assets/js/9e79e6b4.b981fa7a.js | 1 +
zh-CN/assets/js/9ffedc5c.44d4e705.js | 1 +
zh-CN/assets/js/9ffedc5c.ac49de70.js | 1 -
zh-CN/assets/js/a433c88d.8166aef0.js | 1 +
zh-CN/assets/js/a433c88d.b13c8aab.js | 1 -
zh-CN/assets/js/a4adfb7f.63f0235e.js | 1 +
zh-CN/assets/js/a4adfb7f.9fca5ccf.js | 1 -
zh-CN/assets/js/a5b0ceb9.a2f10d6f.js | 1 +
zh-CN/assets/js/a5b0ceb9.b579e5fe.js | 1 -
zh-CN/assets/js/a6aa9e1f.2559dcba.js | 1 -
zh-CN/assets/js/a6aa9e1f.897aa186.js | 1 +
zh-CN/assets/js/a72448b0.5bccfc11.js | 2 -
zh-CN/assets/js/a72448b0.b77ad782.js | 2 +
...ICENSE.txt => a72448b0.b77ad782.js.LICENSE.txt} | 0
zh-CN/assets/js/a7bd4aaa.355191dd.js | 1 +
zh-CN/assets/js/a7bd4aaa.60765541.js | 1 -
zh-CN/assets/js/a94703ab.0447f64a.js | 1 +
zh-CN/assets/js/a94703ab.e7191690.js | 1 -
zh-CN/assets/js/ae5daa8a.bf41b959.js | 1 +
zh-CN/assets/js/ae5daa8a.f62d6a6c.js | 1 -
zh-CN/assets/js/aeeb67f1.7cbd11cf.js | 1 -
zh-CN/assets/js/aeeb67f1.935f3d02.js | 1 +
zh-CN/assets/js/afdde1df.46f7c3b1.js | 1 -
.../assets/js/afdde1df.c48a3fa2.js | 2 +-
zh-CN/assets/js/b1bdc772.0de8f32d.js | 1 -
zh-CN/assets/js/b1bdc772.4011c566.js | 1 +
zh-CN/assets/js/b85a59ca.1e9998d3.js | 1 +
zh-CN/assets/js/b85a59ca.a02e19ee.js | 1 -
zh-CN/assets/js/b94e87ad.0cd921a1.js | 1 -
zh-CN/assets/js/b94e87ad.18b294b8.js | 1 +
zh-CN/assets/js/baaea622.34115266.js | 1 -
.../assets/js/baaea622.d790f5a0.js | 2 +-
zh-CN/assets/js/bb350c59.c3fd826f.js | 1 +
zh-CN/assets/js/bb350c59.ff2f7b20.js | 1 -
zh-CN/assets/js/beec9ed9.6278ec77.js | 1 +
zh-CN/assets/js/beec9ed9.7a349b43.js | 1 -
.../assets/js/bfe08e23.b441bb47.js | 2 +-
zh-CN/assets/js/bfe08e23.b807eeb2.js | 1 -
.../assets/js/c18f1ff5.ba8619d6.js | 2 +-
zh-CN/assets/js/c18f1ff5.fca75998.js | 1 -
zh-CN/assets/js/c8c000df.8ccdd712.js | 1 -
zh-CN/assets/js/c8c000df.c901ae93.js | 1 +
zh-CN/assets/js/ca3ced4f.adb1d8ed.js | 1 +
zh-CN/assets/js/ca3ced4f.dbe56694.js | 1 -
zh-CN/assets/js/cb12bc40.860adffb.js | 1 +
zh-CN/assets/js/cb12bc40.e6c17caf.js | 1 -
zh-CN/assets/js/cb37bc33.01cf61de.js | 1 -
zh-CN/assets/js/cb37bc33.b0b38a0a.js | 1 +
zh-CN/assets/js/ccc49370.8f10c90e.js | 1 +
zh-CN/assets/js/ccc49370.cd77ffa6.js | 1 -
zh-CN/assets/js/ce8fc292.cc985ab2.js | 1 +
zh-CN/assets/js/ce8fc292.fd6bed90.js | 1 -
zh-CN/assets/js/cff057bd.b7e52c79.js | 1 +
zh-CN/assets/js/cff057bd.e42bd7ad.js | 1 -
zh-CN/assets/js/d5bcecbd.f962e687.js | 1 +
zh-CN/assets/js/d6d2a6c5.69db900f.js | 1 -
zh-CN/assets/js/d6d2a6c5.86b27241.js | 1 +
zh-CN/assets/js/d7d04d1f.35e78ce9.js | 1 +
zh-CN/assets/js/d7d04d1f.d0511ca8.js | 1 -
zh-CN/assets/js/d7ef3cd8.1165f9f3.js | 1 +
zh-CN/assets/js/d7ef3cd8.1d0442c7.js | 1 -
zh-CN/assets/js/d980d228.8f029ff6.js | 1 -
zh-CN/assets/js/d980d228.e26b292d.js | 1 +
zh-CN/assets/js/da6654f2.2c2ccc8b.js | 1 -
zh-CN/assets/js/da6654f2.a6999f6f.js | 1 +
zh-CN/assets/js/dc8b965f.43a073ec.js | 1 +
zh-CN/assets/js/dd100b13.2c69a549.js | 1 -
zh-CN/assets/js/dd100b13.f37bcd7b.js | 1 +
.../{d5bcecbd.8f78829f.js => df28f031.5d768b0e.js} | 2 +-
zh-CN/assets/js/df28f031.a69fcdce.js | 1 -
zh-CN/assets/js/dfba363f.6a03c166.js | 1 +
zh-CN/assets/js/dfba363f.9f0e96c9.js | 1 -
zh-CN/assets/js/e0bd1749.dfaaee7e.js | 1 -
zh-CN/assets/js/e0bd1749.e6b3cb84.js | 1 +
zh-CN/assets/js/e218420d.d9b3c689.js | 1 -
zh-CN/assets/js/e218420d.f59f0267.js | 1 +
zh-CN/assets/js/e4ae456e.8192051f.js | 1 -
zh-CN/assets/js/e4ae456e.f02fa986.js | 1 +
zh-CN/assets/js/e961213c.2afdf30b.js | 1 +
zh-CN/assets/js/e961213c.f2c7fd47.js | 1 -
zh-CN/assets/js/eafd45de.8941cacd.js | 1 +
zh-CN/assets/js/eafd45de.8cb6ae00.js | 1 -
.../assets/js/f14de4fc.8ffe1736.js | 2 +-
zh-CN/assets/js/f14de4fc.a9f5822d.js | 1 -
zh-CN/assets/js/f209d110.004eb903.js | 1 -
zh-CN/assets/js/f209d110.25207f48.js | 1 +
zh-CN/assets/js/f45a91b0.4c81afb5.js | 1 -
.../assets/js/f45a91b0.afff2460.js | 2 +-
zh-CN/assets/js/f482e244.aa9bb3fa.js | 1 -
zh-CN/assets/js/f482e244.ff5252d6.js | 1 +
zh-CN/assets/js/f8a2828b.8f52e6df.js | 1 +
zh-CN/assets/js/fb5f18f7.1574f2f3.js | 1 +
zh-CN/assets/js/fb5f18f7.bc20c650.js | 1 -
zh-CN/assets/js/main.e562a349.js | 2 +
...js.LICENSE.txt => main.e562a349.js.LICENSE.txt} | 0
zh-CN/assets/js/main.fe93cc9f.js | 2 -
zh-CN/assets/js/runtime~main.5783cd7b.js | 1 -
zh-CN/assets/js/runtime~main.fab3eb3e.js | 1 +
.../2023/05/11/answer-1.0.9-release/index.html | 7 +-
.../index.html | 7 +-
.../index.html | 7 +-
.../index.html | 7 +-
.../index.html | 7 +-
.../2023/06/15/answer-1.1.0-release/index.html | 7 +-
.../index.html | 7 +-
.../index.html | 7 +-
.../index.html | 7 +-
.../index.html | 7 +-
.../index.html | 7 +-
.../index.html | 7 +-
.../index.html | 7 +-
.../index.html | 7 +-
.../index.html | 7 +-
.../24/answer-enters-apache-incubator/index.html | 7 +-
.../index.html | 7 +-
zh-CN/blog/archive/index.html | 7 +-
zh-CN/blog/category/best-practice/index.html | 7 +-
zh-CN/blog/category/community/index.html | 7 +-
zh-CN/blog/category/insights/index.html | 7 +-
zh-CN/blog/category/release/index.html | 7 +-
zh-CN/blog/category/tech/index.html | 7 +-
zh-CN/blog/category/tutorials/index.html | 7 +-
zh-CN/blog/index.html | 7 +-
zh-CN/blog/page/2/index.html | 7 +-
zh-CN/blog/tags/index.html | 7 +-
zh-CN/blog/tags/tutorials/index.html | 7 +-
zh-CN/community/about/index.html | 9 +-
zh-CN/community/blog-post/index.html | 9 +-
zh-CN/community/contributing/index.html | 9 +-
zh-CN/community/development/index.html | 9 +-
zh-CN/community/how-to-release/index.html | 9 +-
zh-CN/community/index.html | 9 +-
zh-CN/community/issues/index.html | 9 +-
zh-CN/community/plugins/index.html | 9 +-
zh-CN/community/plugins/plugin-config/index.html | 9 +-
.../plugins/plugin-translation/index.html | 9 +-
zh-CN/community/pull-request/index.html | 9 +-
zh-CN/community/translation/index.html | 9 +-
zh-CN/contact/index.html | 7 +-
zh-CN/docs/command-line/index.html | 11 +-
zh-CN/docs/configfile/index.html | 11 +-
zh-CN/docs/contributing/notice/index.html | 11 +-
zh-CN/docs/database/index.html | 11 +-
zh-CN/docs/env/index.html | 11 +-
zh-CN/docs/faq/index.html | 11 +-
zh-CN/docs/flags/index.html | 11 +-
zh-CN/docs/index.html | 11 +-
zh-CN/docs/installation/index.html | 11 +-
zh-CN/docs/moderation/index.html | 9 +-
zh-CN/docs/permission/index.html | 11 +-
zh-CN/docs/plugins/index.html | 11 +-
.../best-practice => docs/questions}/index.html | 14 +-
zh-CN/docs/reputation/index.html | 11 +-
zh-CN/docs/review/index.html | 20 +
zh-CN/docs/settings/index.html | 9 +-
zh-CN/docs/tags/index.html | 20 +
zh-CN/docs/upgrade/index.html | 11 +-
zh-CN/docs/users/index.html | 94 +
zh-CN/index.html | 7 +-
zh-CN/plugins/index.html | 7 +-
zh-CN/search/index.html | 7 +-
zh-CN/sitemap.xml | 2 +-
774 files changed, 509487 insertions(+), 780 deletions(-)
diff --git a/404.html b/404.html
index e1c73b83..b262e50a 100644
--- a/404.html
+++ b/404.html
@@ -8,9 +8,10 @@
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Answer Atom Feed">
-<link rel="stylesheet" href="/fonts/fonts.css"><link rel="stylesheet" href="/assets/css/styles.ed57e243.css">
-<script src="/assets/js/runtime~main.ced68c4d.js" defer="defer"></script>
-<script src="/assets/js/main.2393da95.js" defer="defer"></script>
+
+<link rel="stylesheet" href="/fonts/fonts.css"><link rel="stylesheet" href="/assets/css/styles.2252c3e0.css">
+<script src="/assets/js/runtime~main.0568f635.js" defer="defer"></script>
+<script src="/assets/js/main.68396c67.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/assets/css/styles.ed57e243.css b/assets/css/styles.2252c3e0.css
similarity index 80%
rename from assets/css/styles.ed57e243.css
rename to assets/css/styles.2252c3e0.css
index d238b875..45f3fc23 100644
--- a/assets/css/styles.ed57e243.css
+++ b/assets/css/styles.2252c3e0.css
@@ -1 +1 @@
-@charset "UTF-8";.col,.container{padding:0 var(--ifm-spacing-horizontal)}a code,pre code{color:inherit}.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading))}blockquote,pre{margin:0 0 var(--ifm-spacing-vertical)}.breadcrumbs__link,.button{transition-timing-function:var(--ifm-transition-timing-default)}.btn,.button{-webkit-user-select:none}.button--outline.button--active,.button--outline:active,.but [...]
\ No newline at end of file
+@charset "UTF-8";.col,.container{padding:0 var(--ifm-spacing-horizontal)}a code,pre code{color:inherit}.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading))}blockquote,pre{margin:0 0 var(--ifm-spacing-vertical)}.breadcrumbs__link,.button{transition-timing-function:var(--ifm-transition-timing-default)}.btn,.button{-webkit-user-select:none}.button--outline.button--active,.button--outline:active,.but [...]
\ No newline at end of file
diff --git a/assets/js/01a85c17.6709a49d.js b/assets/js/01a85c17.6709a49d.js
new file mode 100644
index 00000000..cea68ec3
--- /dev/null
+++ b/assets/js/01a85c17.6709a49d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[4013],{18431:(e,t,s)=>{s.d(t,{Z:()=>v});var a=s(85170),i=s(45924),r=s(31355),l=s(1935),n=s(10205),c=s(36426),o=s(31148),m=s(87365);function d(e){const{pathname:t}=(0,o.TH)();return(0,a.useMemo)((()=>e.filter((e=>function(e,t){return!(e.unlisted&&!(0,m.Mg)(e.permalink,t))}(e,t)))),[e,t])}const g={sidebar:"sidebar_vR_X",sidebarItemTitle:"sidebarItemTitle_MbQt",sidebarItemList:"sidebarItemList_qTWL",sidebarItem:"sideb [...]
\ No newline at end of file
diff --git a/assets/js/01a85c17.dc01e24d.js b/assets/js/01a85c17.dc01e24d.js
deleted file mode 100644
index 168494f4..00000000
--- a/assets/js/01a85c17.dc01e24d.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[4013],{8431:(e,t,s)=>{s.d(t,{Z:()=>v});var a=s(5170),i=s(5924),r=s(647),l=s(1935),n=s(205),c=s(6426),o=s(1148),m=s(7365);function d(e){const{pathname:t}=(0,o.TH)();return(0,a.useMemo)((()=>e.filter((e=>function(e,t){return!(e.unlisted&&!(0,m.Mg)(e.permalink,t))}(e,t)))),[e,t])}const g={sidebar:"sidebar_vR_X",sidebarItemTitle:"sidebarItemTitle_MbQt",sidebarItemList:"sidebarItemList_qTWL",sidebarItem:"sidebarItem_gnz [...]
\ No newline at end of file
diff --git a/assets/js/02c33ff0.91b19268.js b/assets/js/02c33ff0.91b19268.js
new file mode 100644
index 00000000..19fe8867
--- /dev/null
+++ b/assets/js/02c33ff0.91b19268.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[6484],{1421:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>s,metadata:()=>o,toc:()=>l});var r=t(43010),a=t(90887);const s={title:"Answer Turns 1, and is Now Apache Answer",authors:["Anne"],category:"Community",featured:!0,image:"2023-10-31-cover@4x.png",description:"Celebrate Answer\u2019s first anniversary with a wrap-up, and stay tuned for new features coming next year. "},i [...]
\ No newline at end of file
diff --git a/assets/js/02c33ff0.f4115ef6.js b/assets/js/02c33ff0.f4115ef6.js
deleted file mode 100644
index 2adb2d1c..00000000
--- a/assets/js/02c33ff0.f4115ef6.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[6484],{1421:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>s,metadata:()=>o,toc:()=>l});var r=t(3010),a=t(887);const s={title:"Answer Turns 1, and is Now Apache Answer",authors:["Anne"],category:"Community",featured:!0,image:"2023-10-31-cover@4x.png",description:"Celebrate Answer\u2019s first anniversary with a wrap-up, and stay tuned for new features coming next year. "},i=vo [...]
\ No newline at end of file
diff --git a/assets/js/03514ddd.297d85b4.js b/assets/js/03514ddd.297d85b4.js
deleted file mode 100644
index 6eeae3eb..00000000
--- a/assets/js/03514ddd.297d85b4.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[2577],{6280:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>s,metadata:()=>r,toc:()=>h});var a=t(3010),i=t(887);const s={title:"Answer Enters Apache Incubator",authors:["Anne"],category:"Community",featured:!0,image:"2023-10-24-cover@4x.png",description:"On October 9th, the knowledge-based Q&A software Answer, developed by SegmentFault team under ONES.com, passed the vote and w [...]
\ No newline at end of file
diff --git a/assets/js/03514ddd.cce70ef0.js b/assets/js/03514ddd.cce70ef0.js
new file mode 100644
index 00000000..6594e408
--- /dev/null
+++ b/assets/js/03514ddd.cce70ef0.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[2577],{36280:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>s,metadata:()=>r,toc:()=>h});var a=t(43010),i=t(90887);const s={title:"Answer Enters Apache Incubator",authors:["Anne"],category:"Community",featured:!0,image:"2023-10-24-cover@4x.png",description:"On October 9th, the knowledge-based Q&A software Answer, developed by SegmentFault team under ONES.com, passed the vote a [...]
\ No newline at end of file
diff --git a/assets/js/0480b142.5107a232.js b/assets/js/0480b142.5107a232.js
deleted file mode 100644
index 3e5d283a..00000000
--- a/assets/js/0480b142.5107a232.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[836],{4398:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>r,toc:()=>l});var a=n(3010),s=n(887);const i={slug:"/faq"},o="FAQ",r={id:"faq",title:"FAQ",description:"How do I access the installation page?",source:"@site/docs/faq.md",sourceDirName:".",slug:"/faq",permalink:"/docs/faq",draft:!1,unlisted:!1,editUrl:"https://github.com/apache/incubator-answer-website/ed [...]
\ No newline at end of file
diff --git a/assets/js/0480b142.7af46686.js b/assets/js/0480b142.7af46686.js
new file mode 100644
index 00000000..a28cb54e
--- /dev/null
+++ b/assets/js/0480b142.7af46686.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[836],{4398:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>r,toc:()=>l});var a=n(43010),s=n(90887);const i={slug:"/faq"},o="FAQ",r={id:"faq",title:"FAQ",description:"How do I access the installation page?",source:"@site/docs/faq.md",sourceDirName:".",slug:"/faq",permalink:"/docs/faq",draft:!1,unlisted:!1,editUrl:"https://github.com/apache/incubator-answer-website [...]
\ No newline at end of file
diff --git a/assets/js/05610178.934f3b39.js b/assets/js/05610178.934f3b39.js
new file mode 100644
index 00000000..301c2e91
--- /dev/null
+++ b/assets/js/05610178.934f3b39.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[3220],{42068:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>a,default:()=>l,frontMatter:()=>o,metadata:()=>r,toc:()=>c});var i=n(43010),s=n(90887);const o={title:"Meet Answer 1.1.0: Your Q&A Community Takes a Step Forward",authors:["Anne"],category:"Release",featured:!0,image:"2023-06-15-cover@4x.png",description:"Answer 1.1.0 is now on GitHub, find out the updates and boost productivity with it."},a=void 0, [...]
\ No newline at end of file
diff --git a/assets/js/05610178.a9b5b5bd.js b/assets/js/05610178.a9b5b5bd.js
deleted file mode 100644
index 657d4db4..00000000
--- a/assets/js/05610178.a9b5b5bd.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[3220],{2068:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>a,default:()=>l,frontMatter:()=>o,metadata:()=>r,toc:()=>c});var i=n(3010),s=n(887);const o={title:"Meet Answer 1.1.0: Your Q&A Community Takes a Step Forward",authors:["Anne"],category:"Release",featured:!0,image:"2023-06-15-cover@4x.png",description:"Answer 1.1.0 is now on GitHub, find out the updates and boost productivity with it."},a=void 0,r={p [...]
\ No newline at end of file
diff --git a/assets/js/062dea8c.2f3c8045.js b/assets/js/062dea8c.2f3c8045.js
deleted file mode 100644
index 56d657cc..00000000
--- a/assets/js/062dea8c.2f3c8045.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[4552],{6322:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>c,frontMatter:()=>o,metadata:()=>r,toc:()=>h});var i=t(3010),s=t(887);const o={title:"How to Improve Knowledge Sharing with Answer",authors:["Anne"],category:"Tutorials",featured:!0,image:"2023-06-20-cover@4x.png",description:"Explore different types of knowledge, and unlock effective knowledge sharing for your team with the right strat [...]
\ No newline at end of file
diff --git a/assets/js/062dea8c.3fa5f94b.js b/assets/js/062dea8c.3fa5f94b.js
new file mode 100644
index 00000000..5dc630c0
--- /dev/null
+++ b/assets/js/062dea8c.3fa5f94b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[4552],{86322:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>c,frontMatter:()=>o,metadata:()=>r,toc:()=>h});var i=t(43010),s=t(90887);const o={title:"How to Improve Knowledge Sharing with Answer",authors:["Anne"],category:"Tutorials",featured:!0,image:"2023-06-20-cover@4x.png",description:"Explore different types of knowledge, and unlock effective knowledge sharing for your team with the right s [...]
\ No newline at end of file
diff --git a/assets/js/0da7f6a0.422ef028.js b/assets/js/0da7f6a0.422ef028.js
deleted file mode 100644
index 44c1a337..00000000
--- a/assets/js/0da7f6a0.422ef028.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[2997],{8960:e=>{e.exports=JSON.parse('{"permalink":"/blog/category/tech","page":1,"postsPerPage":16,"totalPages":1,"totalCount":1,"previousPage":"","nextPage":"","blogDescription":"Learn everything about Answer and leverage your Q&A community.","blogTitle":"Answer Blog"}')}}]);
\ No newline at end of file
diff --git a/assets/js/0da7f6a0.675e88c1.js b/assets/js/0da7f6a0.675e88c1.js
new file mode 100644
index 00000000..7b3a1514
--- /dev/null
+++ b/assets/js/0da7f6a0.675e88c1.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[2997],{78960:e=>{e.exports=JSON.parse('{"permalink":"/blog/category/tech","page":1,"postsPerPage":16,"totalPages":1,"totalCount":1,"previousPage":"","nextPage":"","blogDescription":"Learn everything about Answer and leverage your Q&A community.","blogTitle":"Answer Blog"}')}}]);
\ No newline at end of file
diff --git a/assets/js/1008.647e7b10.js b/assets/js/1008.647e7b10.js
new file mode 100644
index 00000000..b6aebbb9
--- /dev/null
+++ b/assets/js/1008.647e7b10.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[1008],{21008:(t,i,e)=>{e.d(i,{diagram:()=>O});var s=e(28e3),n=e(3694),a=e(27509),h=(e(5726),e(91088),e(95591),function(){var t=function(t,i,e,s){for(e=e||{},s=t.length;s--;e[t[s]]=i);return e},i=[1,10,12,14,16,18,19,21,23],e=[2,6],s=[1,3],n=[1,5],a=[1,6],h=[1,7],o=[1,5,10,12,14,16,18,19,21,23,34,35,36],r=[1,25],l=[1,26],c=[1,28],g=[1,29],u=[1,30],x=[1,31],d=[1,32],p=[1,33],f=[1,34],y=[1,35],m=[1,36],b=[1,37],A=[1,4 [...]
\ No newline at end of file
diff --git a/assets/js/1061.13037890.js b/assets/js/1061.13037890.js
deleted file mode 100644
index 1d46870d..00000000
--- a/assets/js/1061.13037890.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[1061],{3556:(e,t,n)=>{n.d(t,{Z:()=>a});n(5170);var i=n(5924),s=n(6426),o=n(659),r=n(3010);function a(e){let{className:t}=e;return(0,r.jsx)("main",{className:(0,i.Z)("container margin-vert--xl",t),children:(0,r.jsx)("div",{className:"row",children:(0,r.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,r.jsx)(o.Z,{as:"h1",className:"hero__title",children:(0,r.jsx)(s.Z,{id:"theme.NotFound.title",descripti [...]
\ No newline at end of file
diff --git a/assets/js/1061.4180c433.js b/assets/js/1061.4180c433.js
new file mode 100644
index 00000000..a236ec0a
--- /dev/null
+++ b/assets/js/1061.4180c433.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[1061],{63556:(e,t,n)=>{n.d(t,{Z:()=>a});n(85170);var i=n(45924),s=n(36426),o=n(70659),r=n(43010);function a(e){let{className:t}=e;return(0,r.jsx)("main",{className:(0,i.Z)("container margin-vert--xl",t),children:(0,r.jsx)("div",{className:"row",children:(0,r.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,r.jsx)(o.Z,{as:"h1",className:"hero__title",children:(0,r.jsx)(s.Z,{id:"theme.NotFound.title",de [...]
\ No newline at end of file
diff --git a/assets/js/10bf9f7e.70561871.js b/assets/js/10bf9f7e.70561871.js
deleted file mode 100644
index 4757f3b2..00000000
--- a/assets/js/10bf9f7e.70561871.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[8451],{8649:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>h,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>o,toc:()=>l});var s=n(3010),r=n(887);const a={title:"How to Build a Help Center with Your Users and Answer",authors:["Anne"],category:"Tutorials",featured:!0,image:"2023-07-05-cover@4x.png",description:"Build a help center with tutorials and tips from Answer, and the best part is with your users in this [...]
\ No newline at end of file
diff --git a/assets/js/10bf9f7e.c877fd25.js b/assets/js/10bf9f7e.c877fd25.js
new file mode 100644
index 00000000..0d81828f
--- /dev/null
+++ b/assets/js/10bf9f7e.c877fd25.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[8451],{68649:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>h,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>o,toc:()=>l});var s=n(43010),r=n(90887);const a={title:"How to Build a Help Center with Your Users and Answer",authors:["Anne"],category:"Tutorials",featured:!0,image:"2023-07-05-cover@4x.png",description:"Build a help center with tutorials and tips from Answer, and the best part is with your users in t [...]
\ No newline at end of file
diff --git a/assets/js/11488796.7976b572.js b/assets/js/11488796.7976b572.js
deleted file mode 100644
index ac99de96..00000000
--- a/assets/js/11488796.7976b572.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[6679],{7831:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>c,frontMatter:()=>s,metadata:()=>r,toc:()=>l});var i=t(3010),o=t(887);const s={title:"How to use Answer for Effective Knowledge Retention?",authors:["Anne"],category:"Best Practice",featured:!0,image:"2023-05-16-cover@4x.png",description:"Dive into knowledge retention, and find out how Answer empowers your internal knowledge base."},a=v [...]
\ No newline at end of file
diff --git a/assets/js/11488796.eff1bc38.js b/assets/js/11488796.eff1bc38.js
new file mode 100644
index 00000000..9530629f
--- /dev/null
+++ b/assets/js/11488796.eff1bc38.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[6679],{7831:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>c,frontMatter:()=>s,metadata:()=>r,toc:()=>l});var i=t(43010),o=t(90887);const s={title:"How to use Answer for Effective Knowledge Retention?",authors:["Anne"],category:"Best Practice",featured:!0,image:"2023-05-16-cover@4x.png",description:"Dive into knowledge retention, and find out how Answer empowers your internal knowledge base."}, [...]
\ No newline at end of file
diff --git a/assets/js/115e91bb.1c47d4f3.js b/assets/js/115e91bb.f489b108.js
similarity index 59%
copy from assets/js/115e91bb.1c47d4f3.js
copy to assets/js/115e91bb.f489b108.js
index 12b1af43..1baf86c4 100644
--- a/assets/js/115e91bb.1c47d4f3.js
+++ b/assets/js/115e91bb.f489b108.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[6208],{4292:e=>{e.exports=[]}}]);
\ No newline at end of file
+"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[6208],{19809:e=>{e.exports=[]}}]);
\ No newline at end of file
diff --git a/assets/js/124add8d.2c77128a.js b/assets/js/124add8d.0f18ad53.js
similarity index 59%
rename from assets/js/124add8d.2c77128a.js
rename to assets/js/124add8d.0f18ad53.js
index 384d277c..b24bb885 100644
--- a/assets/js/124add8d.2c77128a.js
+++ b/assets/js/124add8d.0f18ad53.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[1732],{287:e=>{e.exports=[]}}]);
\ No newline at end of file
+"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[1732],{80287:e=>{e.exports=[]}}]);
\ No newline at end of file
diff --git a/assets/js/1300.4c852510.js b/assets/js/1300.4c852510.js
new file mode 100644
index 00000000..4a4d6dc3
--- /dev/null
+++ b/assets/js/1300.4c852510.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[1300],{11300:(t,e,r)=>{r.d(e,{diagram:()=>D});var i=r(28e3),a=r(42521),n=r(27509),s=r(87892);const o=[];for(let S=0;S<256;++S)o.push((S+256).toString(16).slice(1));function c(t,e=0){return o[t[e+0]]+o[t[e+1]]+o[t[e+2]]+o[t[e+3]]+"-"+o[t[e+4]]+o[t[e+5]]+"-"+o[t[e+6]]+o[t[e+7]]+"-"+o[t[e+8]]+o[t[e+9]]+"-"+o[t[e+10]]+o[t[e+11]]+o[t[e+12]]+o[t[e+13]]+o[t[e+14]]+o[t[e+15]]}const l=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a [...]
\ No newline at end of file
diff --git a/assets/js/14790698.08e9b9f1.js b/assets/js/14790698.08e9b9f1.js
deleted file mode 100644
index b4b6744b..00000000
--- a/assets/js/14790698.08e9b9f1.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[8596],{8354:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>c});var i=t(3010),s=t(887);const o={title:"Build Your Online Community Like the Pros with Answer",authors:["Anne"],category:"Best Practice",featured:!0,image:"2023-09-14-cover@4x.png",description:"From inception to execution, make your online community happen in 4 steps with Answer."},r=void 0, [...]
\ No newline at end of file
diff --git a/assets/js/14790698.d3c5ee88.js b/assets/js/14790698.d3c5ee88.js
new file mode 100644
index 00000000..6a80f040
--- /dev/null
+++ b/assets/js/14790698.d3c5ee88.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[8596],{48354:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>c});var i=t(43010),s=t(90887);const o={title:"Build Your Online Community Like the Pros with Answer",authors:["Anne"],category:"Best Practice",featured:!0,image:"2023-09-14-cover@4x.png",description:"From inception to execution, make your online community happen in 4 steps with Answer."},r=voi [...]
\ No newline at end of file
diff --git a/assets/js/1516.94768e46.js b/assets/js/1516.94768e46.js
new file mode 100644
index 00000000..4ebc32a7
--- /dev/null
+++ b/assets/js/1516.94768e46.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[1516],{91584:(e,t,n)=>{n.d(t,{a:()=>l});var r=n(17521);function l(e,t){var n=e.append("foreignObject").attr("width","100000"),l=n.append("xhtml:div");l.attr("xmlns","http://www.w3.org/1999/xhtml");var o=t.label;switch(typeof o){case"function":l.insert(o);break;case"object":l.insert((function(){return o}));break;default:l.html(o)}r.bg(l,t.labelStyle),l.style("display","inline-block"),l.style("white-space","nowrap"); [...]
\ No newline at end of file
diff --git a/assets/js/1620c6a0.b6eda198.js b/assets/js/1620c6a0.b6eda198.js
deleted file mode 100644
index 6683d12a..00000000
--- a/assets/js/1620c6a0.b6eda198.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[4945],{533:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>a,contentTitle:()=>s,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var t=i(3010),r=i(887);const o={slug:"/plugins"},s="Contribute for Plugins",l={id:"contributing/plugins",title:"Contribute for Plugins",description:"Viewing the official plugin code will make you to quickly understand and learn plugin development.",source:"@site/community/contributing/plugin [...]
\ No newline at end of file
diff --git a/assets/js/1620c6a0.f2ff92a1.js b/assets/js/1620c6a0.f2ff92a1.js
new file mode 100644
index 00000000..69583196
--- /dev/null
+++ b/assets/js/1620c6a0.f2ff92a1.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[4945],{20533:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>a,contentTitle:()=>s,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var t=i(43010),r=i(90887);const o={slug:"/plugins"},s="Contribute for Plugins",l={id:"contributing/plugins",title:"Contribute for Plugins",description:"Viewing the official plugin code will make you to quickly understand and learn plugin development.",source:"@site/community/contributing/p [...]
\ No newline at end of file
diff --git a/assets/js/16ab27aa.0f88726c.js b/assets/js/16ab27aa.0f88726c.js
deleted file mode 100644
index e5df837b..00000000
--- a/assets/js/16ab27aa.0f88726c.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[6303],{4469:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-blog","id":"default"}')}}]);
\ No newline at end of file
diff --git a/assets/js/16ab27aa.53e462d3.js b/assets/js/16ab27aa.53e462d3.js
new file mode 100644
index 00000000..1952170b
--- /dev/null
+++ b/assets/js/16ab27aa.53e462d3.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[6303],{24469:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-blog","id":"default"}')}}]);
\ No newline at end of file
diff --git a/assets/js/1711.136f6393.js b/assets/js/1711.136f6393.js
new file mode 100644
index 00000000..28685434
--- /dev/null
+++ b/assets/js/1711.136f6393.js
@@ -0,0 +1,2 @@
+/*! For license information please see 1711.136f6393.js.LICENSE.txt */
+(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[1711],{91088:(t,e)=>{"use strict";e.Nm=e.Rq=void 0;var r=/^([^\w]*)(javascript|data|vbscript)/im,i=/&#(\w+)(^\w|;)?/g,n=/&(newline|tab);/gi,o=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim,a=/^.+(:|:)/gim,s=[".","/"];e.Rq="about:blank",e.Nm=function(t){if(!t)return e.Rq;var l,c=(l=t,l.replace(o,"").replace(i,(function(t,e){return String.fromCharCode(e)}))).replace(n,"").replace(o,"").trim();if(!c)return e.Rq;if(func [...]
\ No newline at end of file
diff --git a/assets/js/1711.136f6393.js.LICENSE.txt b/assets/js/1711.136f6393.js.LICENSE.txt
new file mode 100644
index 00000000..b7611cc4
--- /dev/null
+++ b/assets/js/1711.136f6393.js.LICENSE.txt
@@ -0,0 +1,18 @@
+/*!
+ * Wait for document loaded before starting the execution
+ */
+
+/*! @license DOMPurify 3.0.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.0.6/LICENSE */
+
+/*! Check if previously processed */
+
+/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */
+
+/**
+ * Prism: Lightweight, robust, elegant syntax highlighting
+ *
+ * @license MIT <https://opensource.org/licenses/MIT>
+ * @author Lea Verou <https://lea.verou.me>
+ * @namespace
+ * @public
+ */
diff --git a/assets/js/17896441.8c9963e3.js b/assets/js/17896441.8c9963e3.js
new file mode 100644
index 00000000..139e4ae8
--- /dev/null
+++ b/assets/js/17896441.8c9963e3.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[7918],{79308:(e,t,n)=>{n.d(t,{Z:()=>T});var s=n(85170),o=n(9772),a=n(45924),c=n(10227),i=n(71771),r=n(55335);const l={codeBlockContainer:"codeBlockContainer_APcc"};var d=n(43010);function u(e){let{as:t,...n}=e;const s=(0,c.p)(),o=(0,r.QC)(s);return(0,d.jsx)(t,{...n,style:o,className:(0,a.Z)(n.className,l.codeBlockContainer,i.k.common.codeBlock)})}const m={codeBlockContent:"codeBlockContent_m3Ux",codeBlockTitle:"cod [...]
\ No newline at end of file
diff --git a/assets/js/17896441.cef8c140.js b/assets/js/17896441.cef8c140.js
deleted file mode 100644
index cc79b138..00000000
--- a/assets/js/17896441.cef8c140.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[7918],{9308:(e,t,n)=>{n.d(t,{Z:()=>T});var s=n(5170),o=n(9772),a=n(5924),c=n(227),i=n(1771),r=n(5335);const l={codeBlockContainer:"codeBlockContainer_APcc"};var d=n(3010);function u(e){let{as:t,...n}=e;const s=(0,c.p)(),o=(0,r.QC)(s);return(0,d.jsx)(t,{...n,style:o,className:(0,a.Z)(n.className,l.codeBlockContainer,i.k.common.codeBlock)})}const m={codeBlockContent:"codeBlockContent_m3Ux",codeBlockTitle:"codeBlockTi [...]
\ No newline at end of file
diff --git a/assets/js/18e919bd.7a26740c.js b/assets/js/18e919bd.7a26740c.js
deleted file mode 100644
index 7d651fc5..00000000
--- a/assets/js/18e919bd.7a26740c.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[1290],{9899:e=>{e.exports=JSON.parse('{"label":"Best Practice","permalink":"/blog/category/best-practice"}')}}]);
\ No newline at end of file
diff --git a/assets/js/18e919bd.b7464676.js b/assets/js/18e919bd.b7464676.js
new file mode 100644
index 00000000..d1da681b
--- /dev/null
+++ b/assets/js/18e919bd.b7464676.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[1290],{99899:e=>{e.exports=JSON.parse('{"label":"Best Practice","permalink":"/blog/category/best-practice"}')}}]);
\ No newline at end of file
diff --git a/assets/js/1a4e3797.43bebe37.js b/assets/js/1a4e3797.43bebe37.js
new file mode 100644
index 00000000..51ec8405
--- /dev/null
+++ b/assets/js/1a4e3797.43bebe37.js
@@ -0,0 +1,2 @@
+/*! For license information please see 1a4e3797.43bebe37.js.LICENSE.txt */
+(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[7920],{3698:e=>{function t(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function r(e){return"function"==typeof e}function n(e){return"object"==typeof e&&null!==e}function i(e){return void 0===e}e.exports=t,t.prototype._events=void 0,t.prototype._maxListeners=void 0,t.defaultMaxListeners=10,t.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||isNaN(e))throw TypeError("n must be a p [...]
\ No newline at end of file
diff --git a/assets/js/1a4e3797.b95b0d3c.js.LICENSE.txt b/assets/js/1a4e3797.43bebe37.js.LICENSE.txt
similarity index 100%
rename from assets/js/1a4e3797.b95b0d3c.js.LICENSE.txt
rename to assets/js/1a4e3797.43bebe37.js.LICENSE.txt
diff --git a/assets/js/1a4e3797.b95b0d3c.js b/assets/js/1a4e3797.b95b0d3c.js
deleted file mode 100644
index dcea3191..00000000
--- a/assets/js/1a4e3797.b95b0d3c.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/*! For license information please see 1a4e3797.b95b0d3c.js.LICENSE.txt */
-(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[7920],{3698:e=>{function t(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function r(e){return"function"==typeof e}function n(e){return"object"==typeof e&&null!==e}function i(e){return void 0===e}e.exports=t,t.prototype._events=void 0,t.prototype._maxListeners=void 0,t.defaultMaxListeners=10,t.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||isNaN(e))throw TypeError("n must be a p [...]
\ No newline at end of file
diff --git a/assets/js/1a8837ce.7df6a414.js b/assets/js/1a8837ce.7df6a414.js
new file mode 100644
index 00000000..ed6b1317
--- /dev/null
+++ b/assets/js/1a8837ce.7df6a414.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[9849],{1073:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>a,contentTitle:()=>o,default:()=>d,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var t=i(43010),s=i(90887);const r={slug:"/contributing"},o="Contributing",l={id:"contributing/contributing",title:"Contributing",description:"Thanks for your interest in contributing to Apache Answer, hopefully, this document makes the process for contributing clear.",source:"@site/communit [...]
\ No newline at end of file
diff --git a/assets/js/1a8837ce.cb743f07.js b/assets/js/1a8837ce.cb743f07.js
deleted file mode 100644
index c24aa3da..00000000
--- a/assets/js/1a8837ce.cb743f07.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[9849],{1073:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>a,contentTitle:()=>o,default:()=>d,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var t=i(3010),s=i(887);const r={slug:"/contributing"},o="Contributing",l={id:"contributing/contributing",title:"Contributing",description:"Thanks for your interest in contributing to Apache Answer, hopefully, this document makes the process for contributing clear.",source:"@site/community/c [...]
\ No newline at end of file
diff --git a/assets/js/299281dd.0f5bdbd5.js b/assets/js/1d2644f4.2814b2f8.js
similarity index 59%
rename from assets/js/299281dd.0f5bdbd5.js
rename to assets/js/1d2644f4.2814b2f8.js
index 2b69bb46..7a3dc0d1 100644
--- a/assets/js/299281dd.0f5bdbd5.js
+++ b/assets/js/1d2644f4.2814b2f8.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[8034],{3744:e=>{e.exports=[]}}]);
\ No newline at end of file
+"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[2571],{49656:e=>{e.exports=[]}}]);
\ No newline at end of file
diff --git a/assets/js/1df93b7f.1e2cbef9.js b/assets/js/1df93b7f.1e2cbef9.js
new file mode 100644
index 00000000..eea05b53
--- /dev/null
+++ b/assets/js/1df93b7f.1e2cbef9.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[3237],{34246:(A,e,s)=>{s.d(e,{Z:()=>t});s(85170);var o=s(45924),g=s(43010);const t=A=>{let{type:e="br",name:s,className:t,size:n,onClick:i,title:a=""}=A;return(0,g.jsx)("i",{className:(0,o.Z)(e,`bi-${s}`,t),style:{...n&&{fontSize:n}},onClick:i,onKeyDown:i,title:a})}},91165:(A,e,s)=>{s.r(e),s.d(e,{default:()=>j});var o=s(85170),g=s(31355),t=s(96933),n=s(71712),i=s(44790),a=s(45924),r=s(36426),c=s(34246),C=s(30239);c [...]
\ No newline at end of file
diff --git a/assets/js/1df93b7f.1ff749f4.js b/assets/js/1df93b7f.1ff749f4.js
deleted file mode 100644
index 8adaf10e..00000000
--- a/assets/js/1df93b7f.1ff749f4.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[3237],{4246:(A,e,s)=>{s.d(e,{Z:()=>t});s(5170);var o=s(5924),g=s(3010);const t=A=>{let{type:e="br",name:s,className:t,size:n,onClick:i,title:a=""}=A;return(0,g.jsx)("i",{className:(0,o.Z)(e,`bi-${s}`,t),style:{...n&&{fontSize:n}},onClick:i,onKeyDown:i,title:a})}},1165:(A,e,s)=>{s.r(e),s.d(e,{default:()=>j});var o=s(5170),g=s(647),t=s(6933),n=s(1712),i=s(4790),a=s(5924),r=s(6426),c=s(4246),C=s(239);const h={h1:"h1_R [...]
\ No newline at end of file
diff --git a/assets/js/20219bd7.4376cf61.js b/assets/js/20219bd7.4376cf61.js
deleted file mode 100644
index 0c405cd3..00000000
--- a/assets/js/20219bd7.4376cf61.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[6846],{6412:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>l,contentTitle:()=>r,default:()=>c,frontMatter:()=>o,metadata:()=>i,toc:()=>d});var s=t(3010),n=t(887);const o={title:"What is Q&A Platform and How to Use it",authors:["Anne"],category:"Tutorials",tags:["tutorials"],featured:!0,image:"2023-05-12-cover@4x.png",description:"Learn Q&A platform, explore poplular Q&A platforms, and find out how to get the most out of it."}, [...]
\ No newline at end of file
diff --git a/assets/js/20219bd7.9c4f0e65.js b/assets/js/20219bd7.9c4f0e65.js
new file mode 100644
index 00000000..55b888e8
--- /dev/null
+++ b/assets/js/20219bd7.9c4f0e65.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[6846],{76412:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>l,contentTitle:()=>r,default:()=>c,frontMatter:()=>o,metadata:()=>i,toc:()=>d});var s=t(43010),n=t(90887);const o={title:"What is Q&A Platform and How to Use it",authors:["Anne"],category:"Tutorials",tags:["tutorials"],featured:!0,image:"2023-05-12-cover@4x.png",description:"Learn Q&A platform, explore poplular Q&A platforms, and find out how to get the most out of it [...]
\ No newline at end of file
diff --git a/assets/js/227.646ebd22.js b/assets/js/227.646ebd22.js
new file mode 100644
index 00000000..d0e7a3e3
--- /dev/null
+++ b/assets/js/227.646ebd22.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[227],{70227:(t,e,s)=>{s.d(e,{D:()=>l,S:()=>c,a:()=>h,b:()=>a,c:()=>o,d:()=>B,p:()=>r,s:()=>P});var i=s(28e3),n=function(){var t=function(t,e,s,i){for(s=s||{},i=t.length;i--;s[t[i]]=e);return s},e=[1,2],s=[1,3],i=[1,4],n=[2,4],r=[1,9],o=[1,11],a=[1,15],c=[1,16],l=[1,17],h=[1,18],u=[1,30],d=[1,19],p=[1,20],y=[1,21],f=[1,22],m=[1,23],g=[1,25],S=[1,26],_=[1,27],k=[1,28],T=[1,29],b=[1,32],E=[1,33],x=[1,34],C=[1,35],$=[1 [...]
\ No newline at end of file
diff --git a/assets/js/2449.f473e051.js b/assets/js/2449.f473e051.js
new file mode 100644
index 00000000..133836a0
--- /dev/null
+++ b/assets/js/2449.f473e051.js
@@ -0,0 +1,2 @@
+/*! For license information please see 2449.f473e051.js.LICENSE.txt */
+(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[2449],{33519:function(e,t,n){var r;r=function(e){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.i=function(e){return e},n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){r [...]
\ No newline at end of file
diff --git a/assets/js/2449.f473e051.js.LICENSE.txt b/assets/js/2449.f473e051.js.LICENSE.txt
new file mode 100644
index 00000000..a58daed4
--- /dev/null
+++ b/assets/js/2449.f473e051.js.LICENSE.txt
@@ -0,0 +1,9 @@
+/*!
+ 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)
+ */
+
+/*! 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 */
diff --git a/assets/js/2669.67104145.js b/assets/js/2669.67104145.js
new file mode 100644
index 00000000..fe60f86d
--- /dev/null
+++ b/assets/js/2669.67104145.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[2669],{22669:(t,e,n)=>{n.d(e,{diagram:()=>O});var i=n(28e3),s=n(27509),r=n(3723),a=n(55680),o=n(53596),l=(n(5726),n(91088),n(95591),function(){var t=function(t,e,n,i){for(n=n||{},i=t.length;i--;n[t[i]]=e);return n},e=[6,8,10,11,12,14,16,17,20,21],n=[1,9],i=[1,10],s=[1,11],r=[1,12],a=[1,13],o=[1,16],l=[1,17],c={trace:function(){},yy:{},symbols_:{error:2,start:3,timeline:4,document:5,EOF:6,line:7,SPACE:8,statement:9, [...]
\ No newline at end of file
diff --git a/assets/js/2697.7e8d8a38.js b/assets/js/2697.7e8d8a38.js
new file mode 100644
index 00000000..8a1ece0b
--- /dev/null
+++ b/assets/js/2697.7e8d8a38.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[2697],{22697:(t,e,i)=>{i.d(e,{diagram:()=>d});var n=i(28e3),s=i(27509),r=(i(5726),i(91088),i(95591),function(){var t=function(t,e,i,n){for(i=i||{},n=t.length;n--;i[t[n]]=e);return i},e=[1,3],i=[1,4],n=[1,5],s=[1,6],r=[1,10,12,14,16,18,19,20,21,22],l=[2,4],a=[1,5,10,12,14,16,18,19,20,21,22],c=[20,21,22],o=[2,7],h=[1,12],u=[1,13],y=[1,14],p=[1,15],d=[1,16],g=[1,17],f={trace:function(){},yy:{},symbols_:{error:2,start: [...]
\ No newline at end of file
diff --git a/assets/js/26f4acbe.0d095176.js b/assets/js/26f4acbe.0d095176.js
deleted file mode 100644
index 5676b97b..00000000
--- a/assets/js/26f4acbe.0d095176.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[9795],{8534:e=>{e.exports=JSON.parse('{"permalink":"/blog/category/tutorials","page":1,"postsPerPage":16,"totalPages":1,"totalCount":5,"previousPage":"","nextPage":"","blogDescription":"Learn everything about Answer and leverage your Q&A community.","blogTitle":"Answer Blog"}')}}]);
\ No newline at end of file
diff --git a/assets/js/26f4acbe.61eebf15.js b/assets/js/26f4acbe.61eebf15.js
new file mode 100644
index 00000000..ca16ce34
--- /dev/null
+++ b/assets/js/26f4acbe.61eebf15.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[9795],{68534:e=>{e.exports=JSON.parse('{"permalink":"/blog/category/tutorials","page":1,"postsPerPage":16,"totalPages":1,"totalCount":5,"previousPage":"","nextPage":"","blogDescription":"Learn everything about Answer and leverage your Q&A community.","blogTitle":"Answer Blog"}')}}]);
\ No newline at end of file
diff --git a/assets/js/298.f8893466.js b/assets/js/298.f8893466.js
new file mode 100644
index 00000000..f3c46eda
--- /dev/null
+++ b/assets/js/298.f8893466.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[298],{30298:(t,e,n)=>{n.d(e,{d:()=>D,p:()=>r,s:()=>_});var s=n(27509),i=n(28e3),u=function(){var t=function(t,e,n,s){for(n=n||{},s=t.length;s--;n[t[s]]=e);return n},e=[1,16],n=[1,17],s=[1,18],i=[1,37],u=[1,38],r=[1,24],a=[1,22],c=[1,23],o=[1,29],l=[1,30],h=[1,31],A=[1,32],p=[1,33],d=[1,34],y=[1,25],E=[1,26],C=[1,27],m=[1,28],b=[1,42],f=[1,39],F=[1,40],g=[1,41],k=[1,43],T=[1,9],B=[1,8,9],D=[1,54],_=[1,55],S=[1,56],N [...]
\ No newline at end of file
diff --git a/assets/js/1d2644f4.9379a198.js b/assets/js/299281dd.01026900.js
similarity index 59%
rename from assets/js/1d2644f4.9379a198.js
rename to assets/js/299281dd.01026900.js
index 66f5c351..580ef640 100644
--- a/assets/js/1d2644f4.9379a198.js
+++ b/assets/js/299281dd.01026900.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[2571],{9656:e=>{e.exports=[]}}]);
\ No newline at end of file
+"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[8034],{63744:e=>{e.exports=[]}}]);
\ No newline at end of file
diff --git a/assets/js/2a510483.53a39e64.js b/assets/js/2a510483.53a39e64.js
deleted file mode 100644
index e5340a16..00000000
--- a/assets/js/2a510483.53a39e64.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/*! For license information please see 2a510483.53a39e64.js.LICENSE.txt */
-(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[9304],{410:(e,t,n)=>{"use strict";n.r(t),n.d(t,{assets:()=>h,contentTitle:()=>u,default:()=>m,frontMatter:()=>c,metadata:()=>d,toc:()=>p});var r=n(3010),s=n(887),i=n(2829),o=n.n(i),a=n(6426),l=n(8372);const c={slug:"/"},u="Support",d={id:"support",title:"Support",description:"Hey there! Welcome to Apache Answer, a Q&A platform software. We've got a bunch of curious and helpful users who are always willing to give a hand.",sourc [...]
\ No newline at end of file
diff --git a/assets/js/2a510483.9266a796.js b/assets/js/2a510483.9266a796.js
new file mode 100644
index 00000000..acab2c05
--- /dev/null
+++ b/assets/js/2a510483.9266a796.js
@@ -0,0 +1,2 @@
+/*! For license information please see 2a510483.9266a796.js.LICENSE.txt */
+(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[9304],{90410:(e,t,n)=>{"use strict";n.r(t),n.d(t,{assets:()=>h,contentTitle:()=>u,default:()=>m,frontMatter:()=>c,metadata:()=>d,toc:()=>p});var r=n(43010),s=n(90887),i=n(82829),o=n.n(i),a=n(36426),l=n(98372);const c={slug:"/"},u="Support",d={id:"support",title:"Support",description:"Hey there! Welcome to Apache Answer, a Q&A platform software. We've got a bunch of curious and helpful users who are always willing to give a hand [...]
\ No newline at end of file
diff --git a/assets/js/2a510483.53a39e64.js.LICENSE.txt b/assets/js/2a510483.9266a796.js.LICENSE.txt
similarity index 100%
rename from assets/js/2a510483.53a39e64.js.LICENSE.txt
rename to assets/js/2a510483.9266a796.js.LICENSE.txt
diff --git a/assets/js/2c22be1c.31b3483a.js b/assets/js/2c22be1c.31b3483a.js
new file mode 100644
index 00000000..4fb18080
--- /dev/null
+++ b/assets/js/2c22be1c.31b3483a.js
@@ -0,0 +1,2 @@
+/*! For license information please see 2c22be1c.31b3483a.js.LICENSE.txt */
+(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[9870],{23401:(e,s,t)=>{"use strict";t.d(s,{Z:()=>l});var a=t(85170),c=t(45924),r=t(36426);const n="header_briT";var o=t(43010);const i={blog:{title:(0,o.jsx)(r.Z,{id:"blogHeader.title",children:"Blog"}),slogan:(0,o.jsx)(r.Z,{id:"blogHeader.slogan",children:"Learn everything about Answer and leverage your Q&A community to the next level."})},contact:{title:(0,o.jsx)(r.Z,{id:"contact.title",children:"Contact us"}),slogan:(0,o.jsx [...]
\ No newline at end of file
diff --git a/assets/js/2c22be1c.4619767f.js.LICENSE.txt b/assets/js/2c22be1c.31b3483a.js.LICENSE.txt
similarity index 100%
rename from assets/js/2c22be1c.4619767f.js.LICENSE.txt
rename to assets/js/2c22be1c.31b3483a.js.LICENSE.txt
diff --git a/assets/js/2c22be1c.4619767f.js b/assets/js/2c22be1c.4619767f.js
deleted file mode 100644
index 92f3def9..00000000
--- a/assets/js/2c22be1c.4619767f.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/*! For license information please see 2c22be1c.4619767f.js.LICENSE.txt */
-(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[9870],{3401:(e,s,t)=>{"use strict";t.d(s,{Z:()=>l});var a=t(5170),c=t(5924),r=t(6426);const n="header_briT";var o=t(3010);const i={blog:{title:(0,o.jsx)(r.Z,{id:"blogHeader.title",children:"Blog"}),slogan:(0,o.jsx)(r.Z,{id:"blogHeader.slogan",children:"Learn everything about Answer and leverage your Q&A community to the next level."})},contact:{title:(0,o.jsx)(r.Z,{id:"contact.title",children:"Contact us"}),slogan:(0,o.jsx)(r.Z [...]
\ No newline at end of file
diff --git a/assets/js/2d1855c3.6641be04.js b/assets/js/2d1855c3.6641be04.js
new file mode 100644
index 00000000..dbd09780
--- /dev/null
+++ b/assets/js/2d1855c3.6641be04.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[230],{63685:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>h,contentTitle:()=>o,default:()=>c,frontMatter:()=>i,metadata:()=>a,toc:()=>d});var s=t(43010),r=t(90887);const i={title:"Everything You Need to Know About Answer",authors:["Anne"],category:"Community",featured:!0,image:"2023-06-29-cover@4x.png",description:"Find out everything about Answer: our motivation, why it\u2019s open-source, the people behind it, etc."},o=void [...]
\ No newline at end of file
diff --git a/assets/js/2d1855c3.c993c13a.js b/assets/js/2d1855c3.c993c13a.js
deleted file mode 100644
index bd0b7d0d..00000000
--- a/assets/js/2d1855c3.c993c13a.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[230],{3685:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>h,contentTitle:()=>o,default:()=>c,frontMatter:()=>i,metadata:()=>a,toc:()=>d});var s=t(3010),r=t(887);const i={title:"Everything You Need to Know About Answer",authors:["Anne"],category:"Community",featured:!0,image:"2023-06-29-cover@4x.png",description:"Find out everything about Answer: our motivation, why it\u2019s open-source, the people behind it, etc."},o=void 0,a [...]
\ No newline at end of file
diff --git a/assets/js/306a8c6c.14517cd0.js b/assets/js/306a8c6c.14517cd0.js
deleted file mode 100644
index e6205ead..00000000
--- a/assets/js/306a8c6c.14517cd0.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[7616],{9479:e=>{e.exports=JSON.parse('{"pluginId":"community","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"community":[{"type":"link","label":"Support","href":"/community/","docId":"support","unlisted":false},{"type":"link","label":"About","href":"/community/about","docId":"about","unlisted":false},{"type":"category" [...]
\ No newline at end of file
diff --git a/assets/js/306a8c6c.42682ae9.js b/assets/js/306a8c6c.42682ae9.js
new file mode 100644
index 00000000..88486a10
--- /dev/null
+++ b/assets/js/306a8c6c.42682ae9.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[7616],{59479:e=>{e.exports=JSON.parse('{"pluginId":"community","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"community":[{"type":"link","label":"Support","href":"/community/","docId":"support","unlisted":false},{"type":"link","label":"About","href":"/community/about","docId":"about","unlisted":false},{"type":"category [...]
\ No newline at end of file
diff --git a/assets/js/3093.33e255c3.js b/assets/js/3093.33e255c3.js
new file mode 100644
index 00000000..abd8b62e
--- /dev/null
+++ b/assets/js/3093.33e255c3.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[3093],{93093:(e,t,s)=>{s.d(t,{diagram:()=>N});var o=s(70227),i=s(42521),a=s(27509),r=s(28e3),n=s(83880);s(5726),s(91088),s(95591),s(87892),s(39185);const d="rect",l="rectWithTitle",c="statediagram",p=`${c}-state`,b="transition",g=`${b} note-edge`,h=`${c}-note`,u=`${c}-cluster`,y=`${c}-cluster-alt`,f="parent",w="note",x="----",$=`${x}${w}`,m=`${x}${f}`,T="fill:none",S="fill: #333",k="text",D="normal";let A={},v=0;fu [...]
\ No newline at end of file
diff --git a/assets/js/310.14ee915c.js b/assets/js/310.14ee915c.js
new file mode 100644
index 00000000..7eb61a13
--- /dev/null
+++ b/assets/js/310.14ee915c.js
@@ -0,0 +1,3429 @@
+"use strict";
+exports.id = 310;
+exports.ids = [310];
+exports.modules = {
+
+/***/ 68310:
+/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
+
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ diagram: () => (/* binding */ diagram)
+/* harmony export */ });
+/* harmony import */ var _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(28000);
+/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27509);
+/* harmony import */ var _svgDrawCommon_ad5ef572_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(15990);
+/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(91088);
+/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5726);
+/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(52702);
+
+
+
+
+
+
+
+
+
+
+
+
+var parser = function() {
+ var o = function(k, v, o2, l) {
+ for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v)
+ ;
+ return o2;
+ }, $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 [...]
+ var parser2 = {
+ trace: function 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, "ac [...]
+ 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: "participa [...]
+ 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], [2 [...]
+ performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {
+ var $0 = $$.length - 1;
+ switch (yystate) {
+ case 3:
+ yy.apply($$[$0]);
+ return $$[$0];
+ 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] };
+ break;
+ case 23:
+ this.$ = { type: "activeEnd", signalType: yy.LINETYPE.ACTIVE_END, actor: $$[$0 - 1] };
+ 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] }
+ ];
+ 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] }
+ ];
+ 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.DOTTED;
+ break;
+ case 73:
+ this.$ = yy.LINETYPE.SOLID_CROSS;
+ break;
+ case 74:
+ this.$ = yy.LINETYPE.DOTTED_CROSS;
+ break;
+ case 75:
+ this.$ = yy.LINETYPE.SOLID_POINT;
+ break;
+ case 76:
+ this.$ = yy.LINETYPE.DOTTED_POINT;
+ break;
+ case 77:
+ this.$ = yy.parseMessage($$[$0].trim().substring(1));
+ break;
+ }
+ },
+ 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 }, o([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: [...]
+ defaultActions: { 5: [2, 1], 6: [2, 2], 85: [2, 63], 86: [2, 64], 119: [2, 55], 120: [2, 77], 121: [2, 56], 122: [2, 57], 123: [2, 58], 145: [2, 67], 146: [2, 53], 147: [2, 54], 155: [2, 65], 156: [2, 66], 157: [2, 61], 158: [2, 47], 159: [2, 45], 160: [2, 43] },
+ parseError: function parseError(str, hash) {
+ if (hash.recoverable) {
+ this.trace(str);
+ } else {
+ var error = new Error(str);
+ error.hash = hash;
+ throw error;
+ }
+ },
+ parse: function parse(input) {
+ var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1;
+ var args = lstack.slice.call(arguments, 1);
+ var lexer2 = Object.create(this.lexer);
+ var sharedState = { yy: {} };
+ for (var k in this.yy) {
+ if (Object.prototype.hasOwnProperty.call(this.yy, k)) {
+ sharedState.yy[k] = this.yy[k];
+ }
+ }
+ lexer2.setInput(input, sharedState.yy);
+ sharedState.yy.lexer = lexer2;
+ sharedState.yy.parser = this;
+ if (typeof lexer2.yylloc == "undefined") {
+ lexer2.yylloc = {};
+ }
+ var yyloc = lexer2.yylloc;
+ lstack.push(yyloc);
+ var ranges = lexer2.options && lexer2.options.ranges;
+ if (typeof sharedState.yy.parseError === "function") {
+ this.parseError = sharedState.yy.parseError;
+ } else {
+ this.parseError = Object.getPrototypeOf(this).parseError;
+ }
+ function lex() {
+ var token;
+ token = tstack.pop() || lexer2.lex() || EOF;
+ if (typeof token !== "number") {
+ if (token instanceof Array) {
+ tstack = token;
+ token = tstack.pop();
+ }
+ token = self.symbols_[token] || token;
+ }
+ return token;
+ }
+ var symbol, state, action, r, yyval = {}, p, len, newState, expected;
+ while (true) {
+ state = stack[stack.length - 1];
+ if (this.defaultActions[state]) {
+ action = this.defaultActions[state];
+ } else {
+ if (symbol === null || typeof symbol == "undefined") {
+ symbol = lex();
+ }
+ action = table[state] && table[state][symbol];
+ }
+ if (typeof action === "undefined" || !action.length || !action[0]) {
+ var errStr = "";
+ expected = [];
+ for (p in table[state]) {
+ if (this.terminals_[p] && p > TERROR) {
+ expected.push("'" + this.terminals_[p] + "'");
+ }
+ }
+ if (lexer2.showPosition) {
+ errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";
+ } else {
+ errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'");
+ }
+ this.parseError(errStr, {
+ text: lexer2.match,
+ token: this.terminals_[symbol] || symbol,
+ line: lexer2.yylineno,
+ loc: yyloc,
+ expected
+ });
+ }
+ if (action[0] instanceof Array && action.length > 1) {
+ throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol);
+ }
+ switch (action[0]) {
+ case 1:
+ stack.push(symbol);
+ vstack.push(lexer2.yytext);
+ lstack.push(lexer2.yylloc);
+ stack.push(action[1]);
+ symbol = null;
+ {
+ yyleng = lexer2.yyleng;
+ yytext = lexer2.yytext;
+ yylineno = lexer2.yylineno;
+ yyloc = lexer2.yylloc;
+ }
+ 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]
+ ];
+ }
+ r = this.performAction.apply(yyval, [
+ yytext,
+ yyleng,
+ yylineno,
+ sharedState.yy,
+ action[1],
+ vstack,
+ lstack
+ ].concat(args));
+ if (typeof r !== "undefined") {
+ return r;
+ }
+ 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._$);
+ newState = table[stack[stack.length - 2]][stack[stack.length - 1]];
+ stack.push(newState);
+ break;
+ case 3:
+ return true;
+ }
+ }
+ return true;
+ }
+ };
+ var lexer = function() {
+ var lexer2 = {
+ EOF: 1,
+ parseError: function parseError(str, hash) {
+ if (this.yy.parser) {
+ this.yy.parser.parseError(str, hash);
+ } else {
+ throw new Error(str);
+ }
+ },
+ // resets the lexer, sets new input
+ setInput: 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;
+ },
+ // consumes and returns one char from the input
+ input: 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;
+ },
+ // unshifts one char (or a string) into the input
+ unput: 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 r = 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 = [r[0], r[0] + this.yyleng - len];
+ }
+ this.yyleng = this.yytext.length;
+ return this;
+ },
+ // When called from action, caches matched text and appends it on next action
+ more: function() {
+ this._more = true;
+ return this;
+ },
+ // 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: 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;
+ },
+ // retain first n characters of the match
+ less: function(n) {
+ this.unput(this.match.slice(n));
+ },
+ // displays already matched input, i.e. for error messages
+ pastInput: function() {
+ var past = this.matched.substr(0, this.matched.length - this.match.length);
+ return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, "");
+ },
+ // displays upcoming input, i.e. for error messages
+ upcomingInput: function() {
+ var next = this.match;
+ if (next.length < 20) {
+ next += this._input.substr(0, 20 - next.length);
+ }
+ return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, "");
+ },
+ // displays the character position where the lexing error occurred, i.e. for error messages
+ showPosition: function() {
+ var pre = this.pastInput();
+ var c = new Array(pre.length + 1).join("-");
+ return pre + this.upcomingInput() + "\n" + c + "^";
+ },
+ // test the lexed token: return FALSE when not a match, otherwise return token
+ test_match: function(match, indexed_rule) {
+ var token, 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 = match[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 + match[0].length
+ };
+ this.yytext += match[0];
+ this.match += match[0];
+ this.matches = match;
+ 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(match[0].length);
+ this.matched += match[0];
+ token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);
+ if (this.done && this._input) {
+ this.done = false;
+ }
+ if (token) {
+ return token;
+ } else if (this._backtrack) {
+ for (var k in backup) {
+ this[k] = backup[k];
+ }
+ return false;
+ }
+ return false;
+ },
+ // return next match in input
+ next: function() {
+ if (this.done) {
+ return this.EOF;
+ }
+ if (!this._input) {
+ this.done = true;
+ }
+ var token, match, tempMatch, index;
+ if (!this._more) {
+ this.yytext = "";
+ this.match = "";
+ }
+ var rules = this._currentRules();
+ for (var i = 0; i < rules.length; i++) {
+ tempMatch = this._input.match(this.rules[rules[i]]);
+ if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {
+ match = tempMatch;
+ index = i;
+ if (this.options.backtrack_lexer) {
+ token = this.test_match(tempMatch, rules[i]);
+ if (token !== false) {
+ return token;
+ } else if (this._backtrack) {
+ match = false;
+ continue;
+ } else {
+ return false;
+ }
+ } else if (!this.options.flex) {
+ break;
+ }
+ }
+ }
+ if (match) {
+ token = this.test_match(match, rules[index]);
+ if (token !== false) {
+ return token;
+ }
+ 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
+ });
+ }
+ },
+ // return next match that has a token
+ lex: function lex() {
+ var r = this.next();
+ if (r) {
+ return r;
+ } else {
+ return this.lex();
+ }
+ },
+ // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)
+ begin: function begin(condition) {
+ this.conditionStack.push(condition);
+ },
+ // pop the previously active lexer condition state off the condition stack
+ popState: function popState() {
+ var n = this.conditionStack.length - 1;
+ if (n > 0) {
+ return this.conditionStack.pop();
+ } else {
+ return this.conditionStack[0];
+ }
+ },
+ // produce the lexer rule set which is active for the currently active lexer condition state
+ _currentRules: 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;
+ }
+ },
+ // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available
+ topState: function topState(n) {
+ n = this.conditionStack.length - 1 - Math.abs(n || 0);
+ if (n >= 0) {
+ return this.conditionStack[n];
+ } else {
+ return "INITIAL";
+ }
+ },
+ // alias for begin(condition)
+ pushState: function pushState(condition) {
+ this.begin(condition);
+ },
+ // return the number of states currently on the stack
+ stateStackSize: function stateStackSize() {
+ return this.conditionStack.length;
+ },
+ options: { "case-insensitive": true },
+ performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {
+ switch ($avoiding_name_collisions) {
+ case 0:
+ return 5;
+ case 1:
+ break;
+ case 2:
+ break;
+ case 3:
+ break;
+ case 4:
+ break;
+ case 5:
+ break;
+ case 6:
+ return 19;
+ case 7:
+ this.begin("LINE");
+ return 14;
+ case 8:
+ this.begin("ID");
+ return 50;
+ case 9:
+ this.begin("ID");
+ return 52;
+ case 10:
+ return 13;
+ case 11:
+ this.begin("ID");
+ return 53;
+ case 12:
+ yy_.yytext = yy_.yytext.trim();
+ this.begin("ALIAS");
+ return 70;
+ case 13:
+ this.popState();
+ this.popState();
+ this.begin("LINE");
+ return 51;
+ case 14:
+ this.popState();
+ this.popState();
+ return 5;
+ case 15:
+ this.begin("LINE");
+ return 36;
+ case 16:
+ this.begin("LINE");
+ return 37;
+ case 17:
+ this.begin("LINE");
+ return 38;
+ case 18:
+ this.begin("LINE");
+ return 39;
+ case 19:
+ this.begin("LINE");
+ return 49;
+ case 20:
+ this.begin("LINE");
+ return 41;
+ case 21:
+ this.begin("LINE");
+ return 43;
+ case 22:
+ this.begin("LINE");
+ return 48;
+ case 23:
+ this.begin("LINE");
+ return 44;
+ case 24:
+ this.begin("LINE");
+ return 47;
+ case 25:
+ this.begin("LINE");
+ return 46;
+ case 26:
+ this.popState();
+ return 15;
+ case 27:
+ return 16;
+ case 28:
+ return 65;
+ case 29:
+ return 66;
+ case 30:
+ return 59;
+ case 31:
+ return 60;
+ case 32:
+ return 61;
+ case 33:
+ return 62;
+ case 34:
+ return 57;
+ case 35:
+ return 54;
+ case 36:
+ this.begin("ID");
+ return 21;
+ case 37:
+ this.begin("ID");
+ return 23;
+ case 38:
+ return 29;
+ case 39:
+ return 30;
+ case 40:
+ this.begin("acc_title");
+ return 31;
+ case 41:
+ this.popState();
+ return "acc_title_value";
+ case 42:
+ this.begin("acc_descr");
+ return 33;
+ case 43:
+ this.popState();
+ return "acc_descr_value";
+ case 44:
+ this.begin("acc_descr_multiline");
+ break;
+ case 45:
+ this.popState();
+ break;
+ case 46:
+ return "acc_descr_multiline_value";
+ case 47:
+ return 6;
+ case 48:
+ return 18;
+ case 49:
+ return 20;
+ case 50:
+ return 64;
+ case 51:
+ return 5;
+ case 52:
+ yy_.yytext = yy_.yytext.trim();
+ return 70;
+ case 53:
+ return 73;
+ case 54:
+ return 74;
+ case 55:
+ return 71;
+ case 56:
+ return 72;
+ case 57:
+ return 75;
+ case 58:
+ return 76;
+ case 59:
+ return 77;
+ case 60:
+ return 78;
+ case 61:
+ return 79;
+ case 62:
+ return 68;
+ case 63:
+ return 69;
+ case 64:
+ return 5;
+ case 65:
+ return "INVALID";
+ }
+ },
+ 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 [...]
+ 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 [...]
+ };
+ return lexer2;
+ }();
+ parser2.lexer = lexer;
+ function Parser() {
+ this.yy = {};
+ }
+ Parser.prototype = parser2;
+ parser2.Parser = Parser;
+ return new Parser();
+}();
+parser.parser = parser;
+const parser$1 = parser;
+let prevActor = void 0;
+let actors = {};
+let createdActors = {};
+let destroyedActors = {};
+let boxes = [];
+let messages = [];
+let sequenceNumbersEnabled = false;
+let wrapEnabled;
+let currentBox = void 0;
+let lastCreated = void 0;
+let lastDestroyed = void 0;
+const addBox = function(data) {
+ boxes.push({
+ name: data.text,
+ wrap: data.wrap === void 0 && autoWrap() || !!data.wrap,
+ fill: data.color,
+ actorKeys: []
+ });
+ currentBox = boxes.slice(-1)[0];
+};
+const addActor = function(id, name, description, type) {
+ let assignedBox = currentBox;
+ const old = actors[id];
+ if (old) {
+ if (currentBox && old.box && 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 '" + currentBox.name + "' at the same time."
+ );
+ }
+ assignedBox = old.box ? old.box : currentBox;
+ old.box = assignedBox;
+ if (old && name === old.name && description == null) {
+ return;
+ }
+ }
+ if (description == null || description.text == null) {
+ description = { text: name, wrap: null, type };
+ }
+ if (type == null || description.text == null) {
+ description = { text: name, wrap: null, type };
+ }
+ actors[id] = {
+ box: assignedBox,
+ name,
+ description: description.text,
+ wrap: description.wrap === void 0 && autoWrap() || !!description.wrap,
+ prevActor,
+ links: {},
+ properties: {},
+ actorCnt: null,
+ rectData: null,
+ type: type || "participant"
+ };
+ if (prevActor && actors[prevActor]) {
+ actors[prevActor].nextActor = id;
+ }
+ if (currentBox) {
+ currentBox.actorKeys.push(id);
+ }
+ prevActor = id;
+};
+const activationCount = (part) => {
+ let i;
+ let count = 0;
+ for (i = 0; i < messages.length; i++) {
+ if (messages[i].type === LINETYPE.ACTIVE_START && messages[i].from.actor === part) {
+ count++;
+ }
+ if (messages[i].type === LINETYPE.ACTIVE_END && messages[i].from.actor === part) {
+ count--;
+ }
+ }
+ return count;
+};
+const addMessage = function(idFrom, idTo, message, answer) {
+ messages.push({
+ from: idFrom,
+ to: idTo,
+ message: message.text,
+ wrap: message.wrap === void 0 && autoWrap() || !!message.wrap,
+ answer
+ });
+};
+const addSignal = function(idFrom, idTo, message = { text: void 0, wrap: void 0 }, messageType, activate = false) {
+ if (messageType === LINETYPE.ACTIVE_END) {
+ const cnt = activationCount(idFrom.actor);
+ if (cnt < 1) {
+ let error = new Error("Trying to inactivate an inactive participant (" + idFrom.actor + ")");
+ error.hash = {
+ text: "->>-",
+ token: "->>-",
+ line: "1",
+ loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },
+ expected: ["'ACTIVE_PARTICIPANT'"]
+ };
+ throw error;
+ }
+ }
+ messages.push({
+ from: idFrom,
+ to: idTo,
+ message: message.text,
+ wrap: message.wrap === void 0 && autoWrap() || !!message.wrap,
+ type: messageType,
+ activate
+ });
+ return true;
+};
+const hasAtLeastOneBox = function() {
+ return boxes.length > 0;
+};
+const hasAtLeastOneBoxWithTitle = function() {
+ return boxes.some((b) => b.name);
+};
+const getMessages = function() {
+ return messages;
+};
+const getBoxes = function() {
+ return boxes;
+};
+const getActors = function() {
+ return actors;
+};
+const getCreatedActors = function() {
+ return createdActors;
+};
+const getDestroyedActors = function() {
+ return destroyedActors;
+};
+const getActor = function(id) {
+ return actors[id];
+};
+const getActorKeys = function() {
+ return Object.keys(actors);
+};
+const enableSequenceNumbers = function() {
+ sequenceNumbersEnabled = true;
+};
+const disableSequenceNumbers = function() {
+ sequenceNumbersEnabled = false;
+};
+const showSequenceNumbers = () => sequenceNumbersEnabled;
+const setWrap = function(wrapSetting) {
+ wrapEnabled = wrapSetting;
+};
+const autoWrap = () => {
+ if (wrapEnabled !== void 0) {
+ return wrapEnabled;
+ }
+ return (0,_mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.c)().sequence.wrap;
+};
+const clear = function() {
+ actors = {};
+ createdActors = {};
+ destroyedActors = {};
+ boxes = [];
+ messages = [];
+ sequenceNumbersEnabled = false;
+ (0,_mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.t)();
+};
+const parseMessage = function(str) {
+ const _str = str.trim();
+ const message = {
+ text: _str.replace(/^:?(?:no)?wrap:/, "").trim(),
+ wrap: _str.match(/^:?wrap:/) !== null ? true : _str.match(/^:?nowrap:/) !== null ? false : void 0
+ };
+ _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("parseMessage:", message);
+ return message;
+};
+const parseBoxData = function(str) {
+ const match = str.match(/^((?:rgba?|hsla?)\s*\(.*\)|\w*)(.*)$/);
+ let color = match != null && match[1] ? match[1].trim() : "transparent";
+ let title = match != null && match[2] ? match[2].trim() : void 0;
+ if (window && window.CSS) {
+ if (!window.CSS.supports("color", color)) {
+ color = "transparent";
+ title = str.trim();
+ }
+ } else {
+ const style = new Option().style;
+ style.color = color;
+ if (style.color !== color) {
+ color = "transparent";
+ title = str.trim();
+ }
+ }
+ const boxData = {
+ color,
+ text: title !== void 0 ? (0,_mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.d)(title.replace(/^:?(?:no)?wrap:/, ""), (0,_mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.c)()) : void 0,
+ wrap: title !== void 0 ? title.match(/^:?wrap:/) !== null ? true : title.match(/^:?nowrap:/) !== null ? false : void 0 : void 0
+ };
+ return boxData;
+};
+const 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,
+ AUTONUMBER: 26,
+ CRITICAL_START: 27,
+ CRITICAL_OPTION: 28,
+ CRITICAL_END: 29,
+ BREAK_START: 30,
+ BREAK_END: 31,
+ PAR_OVER_START: 32
+};
+const ARROWTYPE = {
+ FILLED: 0,
+ OPEN: 1
+};
+const PLACEMENT = {
+ LEFTOF: 0,
+ RIGHTOF: 1,
+ OVER: 2
+};
+const addNote = function(actor, placement, message) {
+ ({
+ actor,
+ placement,
+ message: message.text,
+ wrap: message.wrap === void 0 && autoWrap() || !!message.wrap
+ });
+ const actors2 = [].concat(actor, actor);
+ messages.push({
+ from: actors2[0],
+ to: actors2[1],
+ message: message.text,
+ wrap: message.wrap === void 0 && autoWrap() || !!message.wrap,
+ type: LINETYPE.NOTE,
+ placement
+ });
+};
+const addLinks = function(actorId, text) {
+ const actor = getActor(actorId);
+ try {
+ let sanitizedText = (0,_mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.d)(text.text, (0,_mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.c)());
+ sanitizedText = sanitizedText.replace(/&/g, "&");
+ sanitizedText = sanitizedText.replace(/=/g, "=");
+ const links = JSON.parse(sanitizedText);
+ insertLinks(actor, links);
+ } catch (e) {
+ _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.l.error("error while parsing actor link text", e);
+ }
+};
+const addALink = function(actorId, text) {
+ const actor = getActor(actorId);
+ try {
+ const links = {};
+ let sanitizedText = (0,_mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.d)(text.text, (0,_mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.c)());
+ var sep = sanitizedText.indexOf("@");
+ sanitizedText = sanitizedText.replace(/&/g, "&");
+ sanitizedText = sanitizedText.replace(/=/g, "=");
+ var label = sanitizedText.slice(0, sep - 1).trim();
+ var link = sanitizedText.slice(sep + 1).trim();
+ links[label] = link;
+ insertLinks(actor, links);
+ } catch (e) {
+ _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.l.error("error while parsing actor link text", e);
+ }
+};
+function insertLinks(actor, links) {
+ if (actor.links == null) {
+ actor.links = links;
+ } else {
+ for (let key in links) {
+ actor.links[key] = links[key];
+ }
+ }
+}
+const addProperties = function(actorId, text) {
+ const actor = getActor(actorId);
+ try {
+ let sanitizedText = (0,_mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.d)(text.text, (0,_mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.c)());
+ const properties = JSON.parse(sanitizedText);
+ insertProperties(actor, properties);
+ } catch (e) {
+ _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.l.error("error while parsing actor properties text", e);
+ }
+};
+function insertProperties(actor, properties) {
+ if (actor.properties == null) {
+ actor.properties = properties;
+ } else {
+ for (let key in properties) {
+ actor.properties[key] = properties[key];
+ }
+ }
+}
+function boxEnd() {
+ currentBox = void 0;
+}
+const addDetails = function(actorId, text) {
+ const actor = getActor(actorId);
+ const elem = document.getElementById(text.text);
+ try {
+ const text2 = elem.innerHTML;
+ const details = JSON.parse(text2);
+ if (details["properties"]) {
+ insertProperties(actor, details["properties"]);
+ }
+ if (details["links"]) {
+ insertLinks(actor, details["links"]);
+ }
+ } catch (e) {
+ _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.l.error("error while parsing actor details text", e);
+ }
+};
+const getActorProperty = function(actor, key) {
+ if (actor !== void 0 && actor.properties !== void 0) {
+ return actor.properties[key];
+ }
+ return void 0;
+};
+const apply = function(param) {
+ if (Array.isArray(param)) {
+ param.forEach(function(item) {
+ apply(item);
+ });
+ } else {
+ switch (param.type) {
+ case "sequenceIndex":
+ 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 (actors[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"
+ );
+ }
+ lastCreated = param.actor;
+ addActor(param.actor, param.actor, param.description, param.draw);
+ createdActors[param.actor] = messages.length;
+ break;
+ case "destroyParticipant":
+ lastDestroyed = param.actor;
+ destroyedActors[param.actor] = 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 (lastCreated) {
+ if (param.to !== lastCreated) {
+ throw new Error(
+ "The created participant " + lastCreated + " does not have an associated creating message after its declaration. Please check the sequence diagram."
+ );
+ } else {
+ lastCreated = void 0;
+ }
+ } else if (lastDestroyed) {
+ if (param.to !== lastDestroyed && param.from !== lastDestroyed) {
+ throw new Error(
+ "The destroyed participant " + lastDestroyed + " does not have an associated destroying message after its declaration. Please check the sequence diagram."
+ );
+ } else {
+ 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":
+ (0,_mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.s)(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;
+ }
+ }
+};
+const db = {
+ addActor,
+ addMessage,
+ addSignal,
+ addLinks,
+ addDetails,
+ addProperties,
+ autoWrap,
+ setWrap,
+ enableSequenceNumbers,
+ disableSequenceNumbers,
+ showSequenceNumbers,
+ getMessages,
+ getActors,
+ getCreatedActors,
+ getDestroyedActors,
+ getActor,
+ getActorKeys,
+ getActorProperty,
+ getAccTitle: _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.g,
+ getBoxes,
+ getDiagramTitle: _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.r,
+ setDiagramTitle: _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.q,
+ getConfig: () => (0,_mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.c)().sequence,
+ clear,
+ parseMessage,
+ parseBoxData,
+ LINETYPE,
+ ARROWTYPE,
+ PLACEMENT,
+ addNote,
+ setAccTitle: _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.s,
+ apply,
+ setAccDescription: _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.b,
+ getAccDescription: _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.a,
+ hasAtLeastOneBox,
+ hasAtLeastOneBoxWithTitle
+};
+const getStyles = (options) => `.actor {
+ stroke: ${options.actorBorder};
+ fill: ${options.actorBkg};
+ }
+
+ text.actor > tspan {
+ fill: ${options.actorTextColor};
+ stroke: none;
+ }
+
+ .actor-line {
+ stroke: ${options.actorLineColor};
+ }
+
+ .messageLine0 {
+ stroke-width: 1.5;
+ stroke-dasharray: none;
+ stroke: ${options.signalColor};
+ }
+
+ .messageLine1 {
+ stroke-width: 1.5;
+ stroke-dasharray: 2, 2;
+ stroke: ${options.signalColor};
+ }
+
+ #arrowhead path {
+ fill: ${options.signalColor};
+ stroke: ${options.signalColor};
+ }
+
+ .sequenceNumber {
+ fill: ${options.sequenceNumberColor};
+ }
+
+ #sequencenumber {
+ fill: ${options.signalColor};
+ }
+
+ #crosshead path {
+ fill: ${options.signalColor};
+ stroke: ${options.signalColor};
+ }
+
+ .messageText {
+ fill: ${options.signalTextColor};
+ stroke: none;
+ }
+
+ .labelBox {
+ stroke: ${options.labelBoxBorderColor};
+ fill: ${options.labelBoxBkgColor};
+ }
+
+ .labelText, .labelText > tspan {
+ fill: ${options.labelTextColor};
+ stroke: none;
+ }
+
+ .loopText, .loopText > tspan {
+ fill: ${options.loopTextColor};
+ stroke: none;
+ }
+
+ .loopLine {
+ stroke-width: 2px;
+ stroke-dasharray: 2, 2;
+ stroke: ${options.labelBoxBorderColor};
+ fill: ${options.labelBoxBorderColor};
+ }
+
+ .note {
+ //stroke: #decc93;
+ stroke: ${options.noteBorderColor};
+ fill: ${options.noteBkgColor};
+ }
+
+ .noteText, .noteText > tspan {
+ fill: ${options.noteTextColor};
+ stroke: none;
+ }
+
+ .activation0 {
+ fill: ${options.activationBkgColor};
+ stroke: ${options.activationBorderColor};
+ }
+
+ .activation1 {
+ fill: ${options.activationBkgColor};
+ stroke: ${options.activationBorderColor};
+ }
+
+ .activation2 {
+ fill: ${options.activationBkgColor};
+ stroke: ${options.activationBorderColor};
+ }
+
+ .actorPopupMenu {
+ position: absolute;
+ }
+
+ .actorPopupMenuPanel {
+ position: absolute;
+ fill: ${options.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: ${options.actorBorder};
+ fill: ${options.actorBkg};
+ }
+ .actor-man circle, line {
+ stroke: ${options.actorBorder};
+ fill: ${options.actorBkg};
+ stroke-width: 2px;
+ }
+`;
+const styles = getStyles;
+const ACTOR_TYPE_WIDTH = 18 * 2;
+const drawRect = function(elem, rectData) {
+ return (0,_svgDrawCommon_ad5ef572_js__WEBPACK_IMPORTED_MODULE_5__.d)(elem, rectData);
+};
+const addPopupInteraction = (id, actorCnt2) => {
+ (0,_mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.F)(() => {
+ const arr = document.querySelectorAll(id);
+ if (arr.length === 0) {
+ return;
+ }
+ arr[0].addEventListener("mouseover", function() {
+ popupMenuUpFunc("actor" + actorCnt2 + "_popup");
+ });
+ arr[0].addEventListener("mouseout", function() {
+ popupMenuDownFunc("actor" + actorCnt2 + "_popup");
+ });
+ });
+};
+const drawPopup = 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 links = actor.links;
+ const actorCnt2 = actor.actorCnt;
+ const rectData = actor.rectData;
+ var displayValue = "none";
+ if (forceMenus) {
+ displayValue = "block !important";
+ }
+ const g = elem.append("g");
+ g.attr("id", "actor" + actorCnt2 + "_popup");
+ g.attr("class", "actorPopupMenu");
+ g.attr("display", displayValue);
+ addPopupInteraction("#actor" + actorCnt2 + "_popup", actorCnt2);
+ var actorClass = "";
+ if (rectData.class !== void 0) {
+ actorClass = " " + rectData.class;
+ }
+ let menuWidth = rectData.width > minMenuWidth ? rectData.width : minMenuWidth;
+ const rectElem = g.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 (links != null) {
+ var linkY = 20;
+ for (let key in links) {
+ var linkElem = g.append("a");
+ var sanitizedLink = (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_1__/* .sanitizeUrl */ .Nm)(links[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 };
+};
+const popupMenu = function(popid) {
+ return "var pu = document.getElementById('" + popid + "'); if (pu != null) { pu.style.display = 'block'; }";
+};
+const popdownMenu = function(popid) {
+ return "var pu = document.getElementById('" + popid + "'); if (pu != null) { pu.style.display = 'none'; }";
+};
+const popupMenuUpFunc = function(popupId) {
+ var pu = document.getElementById(popupId);
+ if (pu != null) {
+ pu.style.display = "block";
+ }
+};
+const popupMenuDownFunc = function(popupId) {
+ var pu = document.getElementById(popupId);
+ if (pu != null) {
+ pu.style.display = "none";
+ }
+};
+const drawText = function(elem, textData) {
+ let prevTextHeight = 0;
+ let textHeight = 0;
+ const lines = textData.text.split(_mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.lineBreakRegex);
+ const [_textFontSize, _textFontSizePx] = (0,_mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.C)(textData.fontSize);
+ let textElems = [];
+ let dy = 0;
+ let yfunc = () => textData.y;
+ if (textData.valign !== void 0 && textData.textMargin !== void 0 && textData.textMargin > 0) {
+ switch (textData.valign) {
+ case "top":
+ case "start":
+ yfunc = () => Math.round(textData.y + textData.textMargin);
+ break;
+ case "middle":
+ case "center":
+ yfunc = () => Math.round(textData.y + (prevTextHeight + textHeight + textData.textMargin) / 2);
+ break;
+ case "bottom":
+ case "end":
+ yfunc = () => Math.round(
+ textData.y + (prevTextHeight + textHeight + 2 * textData.textMargin) - textData.textMargin
+ );
+ 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 [i, line] of lines.entries()) {
+ if (textData.textMargin !== void 0 && textData.textMargin === 0 && _textFontSize !== void 0) {
+ dy = i * _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 text = line || _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.Z;
+ 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(text);
+ } else {
+ textElem.text(text);
+ }
+ 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;
+};
+const drawLabel = function(elem, txtObject) {
+ function genPoints(x, y, width, height, cut) {
+ return x + "," + y + " " + (x + width) + "," + y + " " + (x + width) + "," + (y + height - cut) + " " + (x + width - cut * 1.2) + "," + (y + height) + " " + x + "," + (y + height);
+ }
+ const polygon = elem.append("polygon");
+ polygon.attr("points", genPoints(txtObject.x, txtObject.y, txtObject.width, txtObject.height, 7));
+ polygon.attr("class", "labelBox");
+ txtObject.y = txtObject.y + txtObject.height / 2;
+ drawText(elem, txtObject);
+ return polygon;
+};
+let actorCnt = -1;
+const fixLifeLineHeights = (diagram2, actors2, actorKeys, conf2) => {
+ if (!diagram2.select) {
+ return;
+ }
+ actorKeys.forEach((actorKey) => {
+ const actor = actors2[actorKey];
+ const actorDOM = diagram2.select("#actor" + actor.actorCnt);
+ if (!conf2.mirrorActors && actor.stopy) {
+ actorDOM.attr("y2", actor.stopy + actor.height / 2);
+ } else if (conf2.mirrorActors) {
+ actorDOM.attr("y2", actor.stopy);
+ }
+ });
+};
+const drawActorTypeParticipant = function(elem, actor, conf2, isFooter) {
+ const actorY = isFooter ? actor.stopy : actor.starty;
+ const center = actor.x + actor.width / 2;
+ const centerY = actorY + 5;
+ const boxpluslineGroup = elem.append("g").lower();
+ var g = boxpluslineGroup;
+ if (!isFooter) {
+ actorCnt++;
+ g.append("line").attr("id", "actor" + actorCnt).attr("x1", center).attr("y1", centerY).attr("x2", center).attr("y2", 2e3).attr("class", "actor-line").attr("class", "200").attr("stroke-width", "0.5px").attr("stroke", "#999");
+ g = boxpluslineGroup.append("g");
+ actor.actorCnt = actorCnt;
+ if (actor.links != null) {
+ g.attr("id", "root-" + actorCnt);
+ addPopupInteraction("#root-" + actorCnt, actorCnt);
+ }
+ }
+ const rect = (0,_svgDrawCommon_ad5ef572_js__WEBPACK_IMPORTED_MODULE_5__.g)();
+ var cssclass = "actor";
+ if (actor.properties != null && actor.properties["class"]) {
+ cssclass = actor.properties["class"];
+ } else {
+ rect.fill = "#eaeaea";
+ }
+ rect.x = actor.x;
+ rect.y = actorY;
+ rect.width = actor.width;
+ rect.height = actor.height;
+ rect.class = cssclass;
+ rect.rx = 3;
+ rect.ry = 3;
+ const rectElem = drawRect(g, rect);
+ actor.rectData = rect;
+ if (actor.properties != null && actor.properties["icon"]) {
+ const iconSrc = actor.properties["icon"].trim();
+ if (iconSrc.charAt(0) === "@") {
+ (0,_svgDrawCommon_ad5ef572_js__WEBPACK_IMPORTED_MODULE_5__.b)(g, rect.x + rect.width - 20, rect.y + 10, iconSrc.substr(1));
+ } else {
+ (0,_svgDrawCommon_ad5ef572_js__WEBPACK_IMPORTED_MODULE_5__.c)(g, rect.x + rect.width - 20, rect.y + 10, iconSrc);
+ }
+ }
+ _drawTextCandidateFunc(conf2)(
+ actor.description,
+ g,
+ rect.x,
+ rect.y,
+ rect.width,
+ rect.height,
+ { class: "actor" },
+ conf2
+ );
+ let height = actor.height;
+ if (rectElem.node) {
+ const bounds2 = rectElem.node().getBBox();
+ actor.height = bounds2.height;
+ height = bounds2.height;
+ }
+ return height;
+};
+const drawActorTypeActor = function(elem, actor, conf2, isFooter) {
+ const actorY = isFooter ? actor.stopy : actor.starty;
+ const center = actor.x + actor.width / 2;
+ const centerY = actorY + 80;
+ elem.lower();
+ if (!isFooter) {
+ actorCnt++;
+ elem.append("line").attr("id", "actor" + actorCnt).attr("x1", center).attr("y1", centerY).attr("x2", center).attr("y2", 2e3).attr("class", "actor-line").attr("class", "200").attr("stroke-width", "0.5px").attr("stroke", "#999");
+ actor.actorCnt = actorCnt;
+ }
+ const actElem = elem.append("g");
+ actElem.attr("class", "actor-man");
+ const rect = (0,_svgDrawCommon_ad5ef572_js__WEBPACK_IMPORTED_MODULE_5__.g)();
+ rect.x = actor.x;
+ rect.y = actorY;
+ rect.fill = "#eaeaea";
+ rect.width = actor.width;
+ rect.height = actor.height;
+ rect.class = "actor";
+ rect.rx = 3;
+ rect.ry = 3;
+ actElem.append("line").attr("id", "actor-man-torso" + actorCnt).attr("x1", center).attr("y1", actorY + 25).attr("x2", center).attr("y2", actorY + 45);
+ actElem.append("line").attr("id", "actor-man-arms" + actorCnt).attr("x1", center - ACTOR_TYPE_WIDTH / 2).attr("y1", actorY + 33).attr("x2", center + ACTOR_TYPE_WIDTH / 2).attr("y2", actorY + 33);
+ actElem.append("line").attr("x1", center - ACTOR_TYPE_WIDTH / 2).attr("y1", actorY + 60).attr("x2", center).attr("y2", actorY + 45);
+ actElem.append("line").attr("x1", center).attr("y1", actorY + 45).attr("x2", center + ACTOR_TYPE_WIDTH / 2 - 2).attr("y2", actorY + 60);
+ const circle = actElem.append("circle");
+ circle.attr("cx", actor.x + actor.width / 2);
+ circle.attr("cy", actorY + 10);
+ circle.attr("r", 15);
+ circle.attr("width", actor.width);
+ circle.attr("height", actor.height);
+ const bounds2 = actElem.node().getBBox();
+ actor.height = bounds2.height;
+ _drawTextCandidateFunc(conf2)(
+ actor.description,
+ actElem,
+ rect.x,
+ rect.y + 35,
+ rect.width,
+ rect.height,
+ { class: "actor" },
+ conf2
+ );
+ return actor.height;
+};
+const drawActor = function(elem, actor, conf2, isFooter) {
+ switch (actor.type) {
+ case "actor":
+ return drawActorTypeActor(elem, actor, conf2, isFooter);
+ case "participant":
+ return drawActorTypeParticipant(elem, actor, conf2, isFooter);
+ }
+};
+const drawBox = function(elem, box, conf2) {
+ const boxplustextGroup = elem.append("g");
+ const g = boxplustextGroup;
+ drawBackgroundRect(g, box);
+ if (box.name) {
+ _drawTextCandidateFunc(conf2)(
+ box.name,
+ g,
+ box.x,
+ box.y + (box.textMaxHeight || 0) / 2,
+ box.width,
+ 0,
+ { class: "text" },
+ conf2
+ );
+ }
+ g.lower();
+};
+const anchorElement = function(elem) {
+ return elem.append("g");
+};
+const drawActivation = function(elem, bounds2, verticalPos, conf2, actorActivations2) {
+ const rect = (0,_svgDrawCommon_ad5ef572_js__WEBPACK_IMPORTED_MODULE_5__.g)();
+ const g = bounds2.anchored;
+ rect.x = bounds2.startx;
+ rect.y = bounds2.starty;
+ rect.class = "activation" + actorActivations2 % 3;
+ rect.width = bounds2.stopx - bounds2.startx;
+ rect.height = verticalPos - bounds2.starty;
+ drawRect(g, rect);
+};
+const drawLoop = function(elem, loopModel, labelText, conf2) {
+ const {
+ boxMargin,
+ boxTextMargin,
+ labelBoxHeight,
+ labelBoxWidth,
+ messageFontFamily: fontFamily,
+ messageFontSize: fontSize,
+ messageFontWeight: fontWeight
+ } = conf2;
+ const g = elem.append("g");
+ const drawLoopLine = function(startx, starty, stopx, stopy) {
+ return g.append("line").attr("x1", startx).attr("y1", starty).attr("x2", stopx).attr("y2", stopy).attr("class", "loopLine");
+ };
+ 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 = (0,_svgDrawCommon_ad5ef572_js__WEBPACK_IMPORTED_MODULE_5__.e)();
+ 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(g, txt);
+ txt = getTextObj();
+ 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 = drawText(g, txt);
+ if (loopModel.sectionTitles !== void 0) {
+ loopModel.sectionTitles.forEach(function(item, idx) {
+ 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;
+ textElem = drawText(g, 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 g;
+};
+const drawBackgroundRect = function(elem, bounds2) {
+ (0,_svgDrawCommon_ad5ef572_js__WEBPACK_IMPORTED_MODULE_5__.a)(elem, bounds2);
+};
+const insertDatabaseIcon = 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.0 [...]
+ );
+};
+const insertComputerIcon = 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"
+ );
+};
+const insertClockIcon = 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"
+ );
+};
+const insertArrowHead = 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").append("path").attr("d", "M 0 0 L 10 5 L 0 10 z");
+};
+const insertArrowFilledHead = 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");
+};
+const insertSequenceNumber = 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);
+};
+const insertArrowCrossHead = function(elem) {
+ const defs = elem.append("defs");
+ const marker = defs.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");
+};
+const getTextObj = 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
+ };
+};
+const getNoteRect = function() {
+ return {
+ x: 0,
+ y: 0,
+ fill: "#EDF2AE",
+ stroke: "#666",
+ width: 100,
+ anchor: "start",
+ height: 100,
+ rx: 0,
+ ry: 0
+ };
+};
+const _drawTextCandidateFunc = function() {
+ function byText(content, g, x, y, width, height, textAttrs) {
+ const text = g.append("text").attr("x", x + width / 2).attr("y", y + height / 2 + 5).style("text-anchor", "middle").text(content);
+ _setTextAttrs(text, textAttrs);
+ }
+ function byTspan(content, g, x, y, width, height, textAttrs, conf2) {
+ const { actorFontSize, actorFontFamily, actorFontWeight } = conf2;
+ const [_actorFontSize, _actorFontSizePx] = (0,_mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.C)(actorFontSize);
+ const lines = content.split(_mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.lineBreakRegex);
+ for (let i = 0; i < lines.length; i++) {
+ const dy = i * _actorFontSize - _actorFontSize * (lines.length - 1) / 2;
+ const text = g.append("text").attr("x", x + width / 2).attr("y", y).style("text-anchor", "middle").style("font-size", _actorFontSizePx).style("font-weight", actorFontWeight).style("font-family", actorFontFamily);
+ text.append("tspan").attr("x", x + width / 2).attr("dy", dy).text(lines[i]);
+ text.attr("y", y + height / 2).attr("dominant-baseline", "central").attr("alignment-baseline", "central");
+ _setTextAttrs(text, textAttrs);
+ }
+ }
+ function byFo(content, g, x, y, width, height, textAttrs, conf2) {
+ const s = g.append("switch");
+ const f = s.append("foreignObject").attr("x", x).attr("y", y).attr("width", width).attr("height", height);
+ const text = f.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%");
+ text.append("div").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content);
+ byTspan(content, s, x, y, width, height, textAttrs, conf2);
+ _setTextAttrs(text, textAttrs);
+ }
+ function _setTextAttrs(toText, fromTextAttrsDict) {
+ for (const key in fromTextAttrsDict) {
+ if (fromTextAttrsDict.hasOwnProperty(key)) {
+ toText.attr(key, fromTextAttrsDict[key]);
+ }
+ }
+ }
+ return function(conf2) {
+ return conf2.textPlacement === "fo" ? byFo : conf2.textPlacement === "old" ? byText : byTspan;
+ };
+}();
+const _drawMenuItemTextCandidateFunc = function() {
+ function byText(content, g, x, y, width, height, textAttrs) {
+ const text = g.append("text").attr("x", x).attr("y", y).style("text-anchor", "start").text(content);
+ _setTextAttrs(text, textAttrs);
+ }
+ function byTspan(content, g, x, y, width, height, textAttrs, conf2) {
+ const { actorFontSize, actorFontFamily, actorFontWeight } = conf2;
+ const lines = content.split(_mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.lineBreakRegex);
+ for (let i = 0; i < lines.length; i++) {
+ const dy = i * actorFontSize - actorFontSize * (lines.length - 1) / 2;
+ const text = g.append("text").attr("x", x).attr("y", y).style("text-anchor", "start").style("font-size", actorFontSize).style("font-weight", actorFontWeight).style("font-family", actorFontFamily);
+ text.append("tspan").attr("x", x).attr("dy", dy).text(lines[i]);
+ text.attr("y", y + height / 2).attr("dominant-baseline", "central").attr("alignment-baseline", "central");
+ _setTextAttrs(text, textAttrs);
+ }
+ }
+ function byFo(content, g, x, y, width, height, textAttrs, conf2) {
+ const s = g.append("switch");
+ const f = s.append("foreignObject").attr("x", x).attr("y", y).attr("width", width).attr("height", height);
+ const text = f.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%");
+ text.append("div").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content);
+ byTspan(content, s, x, y, width, height, textAttrs, conf2);
+ _setTextAttrs(text, textAttrs);
+ }
+ function _setTextAttrs(toText, fromTextAttrsDict) {
+ for (const key in fromTextAttrsDict) {
+ if (fromTextAttrsDict.hasOwnProperty(key)) {
+ toText.attr(key, fromTextAttrsDict[key]);
+ }
+ }
+ }
+ return function(conf2) {
+ return conf2.textPlacement === "fo" ? byFo : conf2.textPlacement === "old" ? byText : byTspan;
+ };
+}();
+const svgDraw = {
+ drawRect,
+ drawText,
+ drawLabel,
+ drawActor,
+ drawBox,
+ drawPopup,
+ anchorElement,
+ drawActivation,
+ drawLoop,
+ drawBackgroundRect,
+ insertArrowHead,
+ insertArrowFilledHead,
+ insertSequenceNumber,
+ insertArrowCrossHead,
+ insertDatabaseIcon,
+ insertComputerIcon,
+ insertClockIcon,
+ getTextObj,
+ getNoteRect,
+ popupMenu,
+ popdownMenu,
+ fixLifeLineHeights,
+ sanitizeUrl: _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_1__/* .sanitizeUrl */ .Nm
+};
+let conf = {};
+const bounds = {
+ data: {
+ startx: void 0,
+ stopx: void 0,
+ starty: void 0,
+ stopy: void 0
+ },
+ verticalPos: 0,
+ sequenceItems: [],
+ activations: [],
+ models: {
+ getHeight: 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, h) => acc + h)) + (this.messages.length === 0 ? 0 : this.messages.map((it) => it.height || 0).reduce((acc, h) => acc + h)) + (this.notes.length === 0 ? 0 : this.notes.map((it) => it.height || 0).reduce((acc, h) => acc + h));
+ },
+ clear: function() {
+ this.actors = [];
+ this.boxes = [];
+ this.loops = [];
+ this.messages = [];
+ this.notes = [];
+ },
+ addBox: function(boxModel) {
+ this.boxes.push(boxModel);
+ },
+ addActor: function(actorModel) {
+ this.actors.push(actorModel);
+ },
+ addLoop: function(loopModel) {
+ this.loops.push(loopModel);
+ },
+ addMessage: function(msgModel) {
+ this.messages.push(msgModel);
+ },
+ addNote: function(noteModel) {
+ this.notes.push(noteModel);
+ },
+ lastActor: function() {
+ return this.actors[this.actors.length - 1];
+ },
+ lastLoop: function() {
+ return this.loops[this.loops.length - 1];
+ },
+ lastMessage: function() {
+ return this.messages[this.messages.length - 1];
+ },
+ lastNote: function() {
+ return this.notes[this.notes.length - 1];
+ },
+ actors: [],
+ boxes: [],
+ loops: [],
+ messages: [],
+ notes: []
+ },
+ init: 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;
+ setConf((0,_mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.c)());
+ },
+ updateVal: function(obj, key, val, fun) {
+ if (obj[key] === void 0) {
+ obj[key] = val;
+ } else {
+ obj[key] = fun(val, obj[key]);
+ }
+ },
+ updateBounds: function(startx, starty, stopx, stopy) {
+ const _self = this;
+ let cnt = 0;
+ function updateFn(type) {
+ return function updateItemBounds(item) {
+ cnt++;
+ const n = _self.sequenceItems.length - cnt + 1;
+ _self.updateVal(item, "starty", starty - n * conf.boxMargin, Math.min);
+ _self.updateVal(item, "stopy", stopy + n * conf.boxMargin, Math.max);
+ _self.updateVal(bounds.data, "startx", startx - n * conf.boxMargin, Math.min);
+ _self.updateVal(bounds.data, "stopx", stopx + n * conf.boxMargin, Math.max);
+ if (!(type === "activation")) {
+ _self.updateVal(item, "startx", startx - n * conf.boxMargin, Math.min);
+ _self.updateVal(item, "stopx", stopx + n * conf.boxMargin, Math.max);
+ _self.updateVal(bounds.data, "starty", starty - n * conf.boxMargin, Math.min);
+ _self.updateVal(bounds.data, "stopy", stopy + n * conf.boxMargin, Math.max);
+ }
+ };
+ }
+ this.sequenceItems.forEach(updateFn());
+ this.activations.forEach(updateFn("activation"));
+ },
+ insert: function(startx, starty, stopx, stopy) {
+ const _startx = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMin(startx, stopx);
+ const _stopx = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(startx, stopx);
+ const _starty = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMin(starty, stopy);
+ const _stopy = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.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);
+ },
+ newActivation: function(message, diagram2, actors2) {
+ const actorRect = actors2[message.from.actor];
+ const stackedSize = actorActivations(message.from.actor).length || 0;
+ const x = actorRect.x + actorRect.width / 2 + (stackedSize - 1) * conf.activationWidth / 2;
+ this.activations.push({
+ startx: x,
+ starty: this.verticalPos + 2,
+ stopx: x + conf.activationWidth,
+ stopy: void 0,
+ actor: message.from.actor,
+ anchored: svgDraw.anchorElement(diagram2)
+ });
+ },
+ endActivation: function(message) {
+ const lastActorActivationIdx = this.activations.map(function(activation) {
+ return activation.actor;
+ }).lastIndexOf(message.from.actor);
+ return this.activations.splice(lastActorActivationIdx, 1)[0];
+ },
+ createLoop: function(title = { message: void 0, wrap: false, width: void 0 }, fill) {
+ return {
+ startx: void 0,
+ starty: this.verticalPos,
+ stopx: void 0,
+ stopy: void 0,
+ title: title.message,
+ wrap: title.wrap,
+ width: title.width,
+ height: 0,
+ fill
+ };
+ },
+ newLoop: function(title = { message: void 0, wrap: false, width: void 0 }, fill) {
+ this.sequenceItems.push(this.createLoop(title, fill));
+ },
+ endLoop: function() {
+ return this.sequenceItems.pop();
+ },
+ isLoopOverlap: function() {
+ return this.sequenceItems.length ? this.sequenceItems[this.sequenceItems.length - 1].overlap : false;
+ },
+ addSectionToLoop: 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);
+ },
+ saveVerticalPos: function() {
+ if (this.isLoopOverlap()) {
+ this.savedVerticalPos = this.verticalPos;
+ }
+ },
+ resetVerticalPos: function() {
+ if (this.isLoopOverlap()) {
+ this.verticalPos = this.savedVerticalPos;
+ }
+ },
+ bumpVerticalPos: function(bump) {
+ this.verticalPos = this.verticalPos + bump;
+ this.data.stopy = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(this.data.stopy, this.verticalPos);
+ },
+ getVerticalPos: function() {
+ return this.verticalPos;
+ },
+ getBounds: function() {
+ return { bounds: this.data, models: this.models };
+ }
+};
+const drawNote = function(elem, noteModel) {
+ bounds.bumpVerticalPos(conf.boxMargin);
+ noteModel.height = conf.boxMargin;
+ noteModel.starty = bounds.getVerticalPos();
+ const rect = (0,_svgDrawCommon_ad5ef572_js__WEBPACK_IMPORTED_MODULE_5__.g)();
+ rect.x = noteModel.startx;
+ rect.y = noteModel.starty;
+ rect.width = noteModel.width || conf.width;
+ rect.class = "note";
+ const g = elem.append("g");
+ const rectElem = svgDraw.drawRect(g, rect);
+ const textObj = (0,_svgDrawCommon_ad5ef572_js__WEBPACK_IMPORTED_MODULE_5__.e)();
+ textObj.x = noteModel.startx;
+ textObj.y = noteModel.starty;
+ textObj.width = rect.width;
+ textObj.dy = "1em";
+ textObj.text = noteModel.message;
+ textObj.class = "noteText";
+ textObj.fontFamily = conf.noteFontFamily;
+ textObj.fontSize = conf.noteFontSize;
+ textObj.fontWeight = conf.noteFontWeight;
+ textObj.anchor = conf.noteAlign;
+ textObj.textMargin = conf.noteMargin;
+ textObj.valign = "center";
+ const textElem = drawText(g, 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 * conf.noteMargin);
+ noteModel.height += textHeight + 2 * conf.noteMargin;
+ bounds.bumpVerticalPos(textHeight + 2 * conf.noteMargin);
+ noteModel.stopy = noteModel.starty + textHeight + 2 * conf.noteMargin;
+ noteModel.stopx = noteModel.startx + rect.width;
+ bounds.insert(noteModel.startx, noteModel.starty, noteModel.stopx, noteModel.stopy);
+ bounds.models.addNote(noteModel);
+};
+const messageFont = (cnf) => {
+ return {
+ fontFamily: cnf.messageFontFamily,
+ fontSize: cnf.messageFontSize,
+ fontWeight: cnf.messageFontWeight
+ };
+};
+const noteFont = (cnf) => {
+ return {
+ fontFamily: cnf.noteFontFamily,
+ fontSize: cnf.noteFontSize,
+ fontWeight: cnf.noteFontWeight
+ };
+};
+const actorFont = (cnf) => {
+ return {
+ fontFamily: cnf.actorFontFamily,
+ fontSize: cnf.actorFontSize,
+ fontWeight: cnf.actorFontWeight
+ };
+};
+function boundMessage(_diagram, msgModel) {
+ bounds.bumpVerticalPos(10);
+ const { startx, stopx, message } = msgModel;
+ const lines = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.splitBreaks(message).length;
+ const textDims = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions(message, messageFont(conf));
+ 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 (!conf.rightAngles) {
+ totalOffset += conf.boxMargin;
+ lineStartY = bounds.getVerticalPos() + totalOffset;
+ }
+ totalOffset += 30;
+ const dx = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(textWidth / 2, conf.width / 2);
+ bounds.insert(
+ startx - dx,
+ bounds.getVerticalPos() - 10 + totalOffset,
+ stopx + dx,
+ bounds.getVerticalPos() + 30 + totalOffset
+ );
+ } else {
+ totalOffset += conf.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;
+}
+const drawMessage = function(diagram2, msgModel, lineStartY, diagObj) {
+ const { startx, stopx, starty, message, type, sequenceIndex, sequenceVisible } = msgModel;
+ const textDims = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions(message, messageFont(conf));
+ const textObj = (0,_svgDrawCommon_ad5ef572_js__WEBPACK_IMPORTED_MODULE_5__.e)();
+ textObj.x = startx;
+ textObj.y = starty + 10;
+ textObj.width = stopx - startx;
+ textObj.class = "messageText";
+ textObj.dy = "1em";
+ textObj.text = message;
+ textObj.fontFamily = conf.messageFontFamily;
+ textObj.fontSize = conf.messageFontSize;
+ textObj.fontWeight = conf.messageFontWeight;
+ textObj.anchor = conf.messageAlign;
+ textObj.valign = "center";
+ textObj.textMargin = conf.wrapPadding;
+ textObj.tspan = false;
+ drawText(diagram2, textObj);
+ const textWidth = textDims.width;
+ let line;
+ if (startx === stopx) {
+ if (conf.rightAngles) {
+ line = diagram2.append("path").attr(
+ "d",
+ `M ${startx},${lineStartY} H ${startx + _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(conf.width / 2, textWidth / 2)} V ${lineStartY + 25} H ${startx}`
+ );
+ } else {
+ line = diagram2.append("path").attr(
+ "d",
+ "M " + startx + "," + lineStartY + " C " + (startx + 60) + "," + (lineStartY - 10) + " " + (startx + 60) + "," + (lineStartY + 30) + " " + startx + "," + (lineStartY + 20)
+ );
+ }
+ } else {
+ line = diagram2.append("line");
+ line.attr("x1", startx);
+ line.attr("y1", lineStartY);
+ line.attr("x2", stopx);
+ line.attr("y2", lineStartY);
+ }
+ if (type === diagObj.db.LINETYPE.DOTTED || type === diagObj.db.LINETYPE.DOTTED_CROSS || type === diagObj.db.LINETYPE.DOTTED_POINT || type === diagObj.db.LINETYPE.DOTTED_OPEN) {
+ line.style("stroke-dasharray", "3, 3");
+ line.attr("class", "messageLine1");
+ } else {
+ line.attr("class", "messageLine0");
+ }
+ let url = "";
+ if (conf.arrowMarkerAbsolute) {
+ url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search;
+ url = url.replace(/\(/g, "\\(");
+ url = url.replace(/\)/g, "\\)");
+ }
+ line.attr("stroke-width", 2);
+ line.attr("stroke", "none");
+ line.style("fill", "none");
+ if (type === diagObj.db.LINETYPE.SOLID || type === diagObj.db.LINETYPE.DOTTED) {
+ line.attr("marker-end", "url(" + url + "#arrowhead)");
+ }
+ if (type === diagObj.db.LINETYPE.SOLID_POINT || type === diagObj.db.LINETYPE.DOTTED_POINT) {
+ line.attr("marker-end", "url(" + url + "#filled-head)");
+ }
+ if (type === diagObj.db.LINETYPE.SOLID_CROSS || type === diagObj.db.LINETYPE.DOTTED_CROSS) {
+ line.attr("marker-end", "url(" + url + "#crosshead)");
+ }
+ if (sequenceVisible || conf.showSequenceNumbers) {
+ line.attr("marker-start", "url(" + url + "#sequencenumber)");
+ diagram2.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);
+ }
+};
+const addActorRenderingData = function(diagram2, actors2, createdActors2, actorKeys, verticalPos, messages2, isFooter) {
+ let prevWidth = 0;
+ let prevMargin = 0;
+ let prevBox = void 0;
+ let maxHeight = 0;
+ for (const actorKey of actorKeys) {
+ const actor = actors2[actorKey];
+ const box = actor.box;
+ if (prevBox && prevBox != box) {
+ if (!isFooter) {
+ bounds.models.addBox(prevBox);
+ }
+ prevMargin += conf.boxMargin + prevBox.margin;
+ }
+ if (box && box != prevBox) {
+ if (!isFooter) {
+ box.x = prevWidth + prevMargin;
+ box.y = verticalPos;
+ }
+ prevMargin += box.margin;
+ }
+ actor.width = actor.width || conf.width;
+ actor.height = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(actor.height || conf.height, conf.height);
+ actor.margin = actor.margin || conf.actorMargin;
+ maxHeight = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(maxHeight, actor.height);
+ if (createdActors2[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);
+};
+const drawActors = function(diagram2, actors2, actorKeys, isFooter) {
+ if (!isFooter) {
+ for (const actorKey of actorKeys) {
+ const actor = actors2[actorKey];
+ svgDraw.drawActor(diagram2, actor, conf, false);
+ }
+ } else {
+ let maxHeight = 0;
+ bounds.bumpVerticalPos(conf.boxMargin * 2);
+ for (const actorKey of actorKeys) {
+ const actor = actors2[actorKey];
+ if (!actor.stopy) {
+ actor.stopy = bounds.getVerticalPos();
+ }
+ const height = svgDraw.drawActor(diagram2, actor, conf, true);
+ maxHeight = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(maxHeight, height);
+ }
+ bounds.bumpVerticalPos(maxHeight + conf.boxMargin);
+ }
+};
+const drawActorsPopup = function(diagram2, actors2, actorKeys, doc) {
+ let maxHeight = 0;
+ let maxWidth = 0;
+ for (const actorKey of actorKeys) {
+ const actor = actors2[actorKey];
+ const minMenuWidth = getRequiredPopupWidth(actor);
+ const menuDimensions = svgDraw.drawPopup(
+ diagram2,
+ actor,
+ minMenuWidth,
+ conf,
+ conf.forceMenus,
+ doc
+ );
+ if (menuDimensions.height > maxHeight) {
+ maxHeight = menuDimensions.height;
+ }
+ if (menuDimensions.width + actor.x > maxWidth) {
+ maxWidth = menuDimensions.width + actor.x;
+ }
+ }
+ return { maxHeight, maxWidth };
+};
+const setConf = function(cnf) {
+ (0,_mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.f)(conf, cnf);
+ if (cnf.fontFamily) {
+ conf.actorFontFamily = conf.noteFontFamily = conf.messageFontFamily = cnf.fontFamily;
+ }
+ if (cnf.fontSize) {
+ conf.actorFontSize = conf.noteFontSize = conf.messageFontSize = cnf.fontSize;
+ }
+ if (cnf.fontWeight) {
+ conf.actorFontWeight = conf.noteFontWeight = conf.messageFontWeight = cnf.fontWeight;
+ }
+};
+const actorActivations = function(actor) {
+ return bounds.activations.filter(function(activation) {
+ return activation.actor === actor;
+ });
+};
+const activationBounds = function(actor, actors2) {
+ const actorObj = actors2[actor];
+ const activations = actorActivations(actor);
+ const left = activations.reduce(function(acc, activation) {
+ return _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMin(acc, activation.startx);
+ }, actorObj.x + actorObj.width / 2 - 1);
+ const right = activations.reduce(function(acc, activation) {
+ return _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(acc, activation.stopx);
+ }, actorObj.x + actorObj.width / 2 + 1);
+ return [left, right];
+};
+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 = messageFont(conf);
+ msg.message = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.u.wrapLabel(`[${msg.message}]`, loopWidth - 2 * conf.wrapPadding, textConf);
+ msg.width = loopWidth;
+ msg.wrap = true;
+ const textDims = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions(msg.message, textConf);
+ const totalOffset = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(textDims.height, conf.labelBoxHeight);
+ heightAdjust = postMargin + totalOffset;
+ _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(`${totalOffset} - ${msg.message}`);
+ }
+ addLoopFn(msg);
+ bounds.bumpVerticalPos(heightAdjust);
+}
+function adjustCreatedDestroyedData(msg, msgModel, lineStartY, index, actors2, createdActors2, destroyedActors2) {
+ function receiverAdjustment(actor, adjustment) {
+ if (actor.x < actors2[msg.from].x) {
+ bounds.insert(
+ msgModel.stopx - adjustment,
+ msgModel.starty,
+ msgModel.startx,
+ msgModel.stopy + actor.height / 2 + conf.noteMargin
+ );
+ msgModel.stopx = msgModel.stopx + adjustment;
+ } else {
+ bounds.insert(
+ msgModel.startx,
+ msgModel.starty,
+ msgModel.stopx + adjustment,
+ msgModel.stopy + actor.height / 2 + conf.noteMargin
+ );
+ msgModel.stopx = msgModel.stopx - adjustment;
+ }
+ }
+ function senderAdjustment(actor, adjustment) {
+ if (actor.x < actors2[msg.to].x) {
+ bounds.insert(
+ msgModel.startx - adjustment,
+ msgModel.starty,
+ msgModel.stopx,
+ msgModel.stopy + actor.height / 2 + conf.noteMargin
+ );
+ msgModel.startx = msgModel.startx + adjustment;
+ } else {
+ bounds.insert(
+ msgModel.stopx,
+ msgModel.starty,
+ msgModel.startx + adjustment,
+ msgModel.stopy + actor.height / 2 + conf.noteMargin
+ );
+ msgModel.startx = msgModel.startx - adjustment;
+ }
+ }
+ if (createdActors2[msg.to] == index) {
+ const actor = actors2[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 (destroyedActors2[msg.from] == index) {
+ const actor = actors2[msg.from];
+ if (conf.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 (destroyedActors2[msg.to] == index) {
+ const actor = actors2[msg.to];
+ if (conf.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);
+ }
+}
+const draw = function(_text, id, _version, diagObj) {
+ const { securityLevel, sequence } = (0,_mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.c)();
+ conf = sequence;
+ let sandboxElement;
+ if (securityLevel === "sandbox") {
+ sandboxElement = (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("#i" + id);
+ }
+ const root = securityLevel === "sandbox" ? (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)("body");
+ const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document;
+ bounds.init();
+ _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(diagObj.db);
+ const diagram2 = securityLevel === "sandbox" ? root.select(`[id="${id}"]`) : (0,d3__WEBPACK_IMPORTED_MODULE_0__/* .select */ .Ys)(`[id="${id}"]`);
+ const actors2 = diagObj.db.getActors();
+ const createdActors2 = diagObj.db.getCreatedActors();
+ const destroyedActors2 = diagObj.db.getDestroyedActors();
+ const boxes2 = diagObj.db.getBoxes();
+ let actorKeys = diagObj.db.getActorKeys();
+ const messages2 = diagObj.db.getMessages();
+ const title = diagObj.db.getDiagramTitle();
+ const hasBoxes = diagObj.db.hasAtLeastOneBox();
+ const hasBoxTitles = diagObj.db.hasAtLeastOneBoxWithTitle();
+ const maxMessageWidthPerActor = getMaxMessageWidthPerActor(actors2, messages2, diagObj);
+ conf.height = calculateActorMargins(actors2, maxMessageWidthPerActor, boxes2);
+ svgDraw.insertComputerIcon(diagram2);
+ svgDraw.insertDatabaseIcon(diagram2);
+ svgDraw.insertClockIcon(diagram2);
+ if (hasBoxes) {
+ bounds.bumpVerticalPos(conf.boxMargin);
+ if (hasBoxTitles) {
+ bounds.bumpVerticalPos(boxes2[0].textMaxHeight);
+ }
+ }
+ if (conf.hideUnusedParticipants === true) {
+ const newActors = /* @__PURE__ */ new Set();
+ messages2.forEach((message) => {
+ newActors.add(message.from);
+ newActors.add(message.to);
+ });
+ actorKeys = actorKeys.filter((actorKey) => newActors.has(actorKey));
+ }
+ addActorRenderingData(diagram2, actors2, createdActors2, actorKeys, 0, messages2, false);
+ const loopWidths = calculateLoopBounds(messages2, actors2, maxMessageWidthPerActor, diagObj);
+ svgDraw.insertArrowHead(diagram2);
+ svgDraw.insertArrowCrossHead(diagram2);
+ svgDraw.insertArrowFilledHead(diagram2);
+ svgDraw.insertSequenceNumber(diagram2);
+ function activeEnd(msg, verticalPos) {
+ const activationData = bounds.endActivation(msg);
+ if (activationData.starty + 18 > verticalPos) {
+ activationData.starty = verticalPos - 6;
+ verticalPos += 12;
+ }
+ svgDraw.drawActivation(
+ diagram2,
+ activationData,
+ verticalPos,
+ conf,
+ actorActivations(msg.from.actor).length
+ );
+ bounds.insert(activationData.startx, verticalPos - 10, activationData.stopx, verticalPos);
+ }
+ let sequenceIndex = 1;
+ let sequenceIndexStep = 1;
+ const messagesToDraw = [];
+ const backgrounds = [];
+ messages2.forEach(function(msg, index) {
+ let loopModel, noteModel, msgModel;
+ switch (msg.type) {
+ case diagObj.db.LINETYPE.NOTE:
+ bounds.resetVerticalPos();
+ noteModel = msg.noteModel;
+ drawNote(diagram2, noteModel);
+ break;
+ case diagObj.db.LINETYPE.ACTIVE_START:
+ bounds.newActivation(msg, diagram2, actors2);
+ break;
+ case diagObj.db.LINETYPE.ACTIVE_END:
+ activeEnd(msg, bounds.getVerticalPos());
+ break;
+ case diagObj.db.LINETYPE.LOOP_START:
+ adjustLoopHeightForWrap(
+ loopWidths,
+ msg,
+ conf.boxMargin,
+ conf.boxMargin + conf.boxTextMargin,
+ (message) => bounds.newLoop(message)
+ );
+ break;
+ case diagObj.db.LINETYPE.LOOP_END:
+ loopModel = bounds.endLoop();
+ svgDraw.drawLoop(diagram2, loopModel, "loop", conf);
+ bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos());
+ bounds.models.addLoop(loopModel);
+ break;
+ case diagObj.db.LINETYPE.RECT_START:
+ adjustLoopHeightForWrap(
+ loopWidths,
+ msg,
+ conf.boxMargin,
+ conf.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,
+ conf.boxMargin,
+ conf.boxMargin + conf.boxTextMargin,
+ (message) => bounds.newLoop(message)
+ );
+ break;
+ case diagObj.db.LINETYPE.OPT_END:
+ loopModel = bounds.endLoop();
+ svgDraw.drawLoop(diagram2, loopModel, "opt", conf);
+ bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos());
+ bounds.models.addLoop(loopModel);
+ break;
+ case diagObj.db.LINETYPE.ALT_START:
+ adjustLoopHeightForWrap(
+ loopWidths,
+ msg,
+ conf.boxMargin,
+ conf.boxMargin + conf.boxTextMargin,
+ (message) => bounds.newLoop(message)
+ );
+ break;
+ case diagObj.db.LINETYPE.ALT_ELSE:
+ adjustLoopHeightForWrap(
+ loopWidths,
+ msg,
+ conf.boxMargin + conf.boxTextMargin,
+ conf.boxMargin,
+ (message) => bounds.addSectionToLoop(message)
+ );
+ break;
+ case diagObj.db.LINETYPE.ALT_END:
+ loopModel = bounds.endLoop();
+ svgDraw.drawLoop(diagram2, loopModel, "alt", conf);
+ 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,
+ conf.boxMargin,
+ conf.boxMargin + conf.boxTextMargin,
+ (message) => bounds.newLoop(message)
+ );
+ bounds.saveVerticalPos();
+ break;
+ case diagObj.db.LINETYPE.PAR_AND:
+ adjustLoopHeightForWrap(
+ loopWidths,
+ msg,
+ conf.boxMargin + conf.boxTextMargin,
+ conf.boxMargin,
+ (message) => bounds.addSectionToLoop(message)
+ );
+ break;
+ case diagObj.db.LINETYPE.PAR_END:
+ loopModel = bounds.endLoop();
+ svgDraw.drawLoop(diagram2, loopModel, "par", conf);
+ 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,
+ conf.boxMargin,
+ conf.boxMargin + conf.boxTextMargin,
+ (message) => bounds.newLoop(message)
+ );
+ break;
+ case diagObj.db.LINETYPE.CRITICAL_OPTION:
+ adjustLoopHeightForWrap(
+ loopWidths,
+ msg,
+ conf.boxMargin + conf.boxTextMargin,
+ conf.boxMargin,
+ (message) => bounds.addSectionToLoop(message)
+ );
+ break;
+ case diagObj.db.LINETYPE.CRITICAL_END:
+ loopModel = bounds.endLoop();
+ svgDraw.drawLoop(diagram2, loopModel, "critical", conf);
+ bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos());
+ bounds.models.addLoop(loopModel);
+ break;
+ case diagObj.db.LINETYPE.BREAK_START:
+ adjustLoopHeightForWrap(
+ loopWidths,
+ msg,
+ conf.boxMargin,
+ conf.boxMargin + conf.boxTextMargin,
+ (message) => bounds.newLoop(message)
+ );
+ break;
+ case diagObj.db.LINETYPE.BREAK_END:
+ loopModel = bounds.endLoop();
+ svgDraw.drawLoop(diagram2, loopModel, "break", conf);
+ 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 = boundMessage(diagram2, msgModel);
+ adjustCreatedDestroyedData(
+ msg,
+ msgModel,
+ lineStartY,
+ index,
+ actors2,
+ createdActors2,
+ destroyedActors2
+ );
+ messagesToDraw.push({ messageModel: msgModel, lineStartY });
+ bounds.models.addMessage(msgModel);
+ } catch (e) {
+ _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.l.error("error while drawing message", e);
+ }
+ }
+ 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
+ ].includes(msg.type)) {
+ sequenceIndex = sequenceIndex + sequenceIndexStep;
+ }
+ });
+ _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("createdActors", createdActors2);
+ _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("destroyedActors", destroyedActors2);
+ drawActors(diagram2, actors2, actorKeys, false);
+ messagesToDraw.forEach((e) => drawMessage(diagram2, e.messageModel, e.lineStartY, diagObj));
+ if (conf.mirrorActors) {
+ drawActors(diagram2, actors2, actorKeys, true);
+ }
+ backgrounds.forEach((e) => svgDraw.drawBackgroundRect(diagram2, e));
+ fixLifeLineHeights(diagram2, actors2, actorKeys, conf);
+ bounds.models.boxes.forEach(function(box2) {
+ 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.drawBox(diagram2, box2, conf);
+ });
+ if (hasBoxes) {
+ bounds.bumpVerticalPos(conf.boxMargin);
+ }
+ const requiredBoxSize = drawActorsPopup(diagram2, actors2, actorKeys, doc);
+ const { bounds: box } = bounds.getBounds();
+ let boxHeight = box.stopy - box.starty;
+ if (boxHeight < requiredBoxSize.maxHeight) {
+ boxHeight = requiredBoxSize.maxHeight;
+ }
+ let height = boxHeight + 2 * conf.diagramMarginY;
+ if (conf.mirrorActors) {
+ height = height - conf.boxMargin + conf.bottomMarginAdj;
+ }
+ let boxWidth = box.stopx - box.startx;
+ if (boxWidth < requiredBoxSize.maxWidth) {
+ boxWidth = requiredBoxSize.maxWidth;
+ }
+ const width = boxWidth + 2 * conf.diagramMarginX;
+ if (title) {
+ diagram2.append("text").text(title).attr("x", (box.stopx - box.startx) / 2 - 2 * conf.diagramMarginX).attr("y", -25);
+ }
+ (0,_mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.i)(diagram2, height, width, conf.useMaxWidth);
+ const extraVertForTitle = title ? 40 : 0;
+ diagram2.attr(
+ "viewBox",
+ box.startx - conf.diagramMarginX + " -" + (conf.diagramMarginY + extraVertForTitle) + " " + width + " " + (height + extraVertForTitle)
+ );
+ _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(`models:`, bounds.models);
+};
+function getMaxMessageWidthPerActor(actors2, messages2, diagObj) {
+ const maxMessageWidthPerActor = {};
+ messages2.forEach(function(msg) {
+ if (actors2[msg.to] && actors2[msg.from]) {
+ const actor = actors2[msg.to];
+ if (msg.placement === diagObj.db.PLACEMENT.LEFTOF && !actor.prevActor) {
+ return;
+ }
+ if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF && !actor.nextActor) {
+ return;
+ }
+ const isNote = msg.placement !== void 0;
+ const isMessage = !isNote;
+ const textFont = isNote ? noteFont(conf) : messageFont(conf);
+ const wrappedMessage = msg.wrap ? _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.u.wrapLabel(msg.message, conf.width - 2 * conf.wrapPadding, textFont) : msg.message;
+ const messageDimensions = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions(wrappedMessage, textFont);
+ const messageWidth = messageDimensions.width + 2 * conf.wrapPadding;
+ if (isMessage && msg.from === actor.nextActor) {
+ maxMessageWidthPerActor[msg.to] = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(
+ maxMessageWidthPerActor[msg.to] || 0,
+ messageWidth
+ );
+ } else if (isMessage && msg.from === actor.prevActor) {
+ maxMessageWidthPerActor[msg.from] = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(
+ maxMessageWidthPerActor[msg.from] || 0,
+ messageWidth
+ );
+ } else if (isMessage && msg.from === msg.to) {
+ maxMessageWidthPerActor[msg.from] = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(
+ maxMessageWidthPerActor[msg.from] || 0,
+ messageWidth / 2
+ );
+ maxMessageWidthPerActor[msg.to] = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(
+ maxMessageWidthPerActor[msg.to] || 0,
+ messageWidth / 2
+ );
+ } else if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF) {
+ maxMessageWidthPerActor[msg.from] = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(
+ maxMessageWidthPerActor[msg.from] || 0,
+ messageWidth
+ );
+ } else if (msg.placement === diagObj.db.PLACEMENT.LEFTOF) {
+ maxMessageWidthPerActor[actor.prevActor] = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(
+ maxMessageWidthPerActor[actor.prevActor] || 0,
+ messageWidth
+ );
+ } else if (msg.placement === diagObj.db.PLACEMENT.OVER) {
+ if (actor.prevActor) {
+ maxMessageWidthPerActor[actor.prevActor] = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(
+ maxMessageWidthPerActor[actor.prevActor] || 0,
+ messageWidth / 2
+ );
+ }
+ if (actor.nextActor) {
+ maxMessageWidthPerActor[msg.from] = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(
+ maxMessageWidthPerActor[msg.from] || 0,
+ messageWidth / 2
+ );
+ }
+ }
+ }
+ });
+ _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("maxMessageWidthPerActor:", maxMessageWidthPerActor);
+ return maxMessageWidthPerActor;
+}
+const getRequiredPopupWidth = function(actor) {
+ let requiredPopupWidth = 0;
+ const textFont = actorFont(conf);
+ for (const key in actor.links) {
+ const labelDimensions = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions(key, textFont);
+ const labelWidth = labelDimensions.width + 2 * conf.wrapPadding + 2 * conf.boxMargin;
+ if (requiredPopupWidth < labelWidth) {
+ requiredPopupWidth = labelWidth;
+ }
+ }
+ return requiredPopupWidth;
+};
+function calculateActorMargins(actors2, actorToMessageWidth, boxes2) {
+ let maxHeight = 0;
+ Object.keys(actors2).forEach((prop) => {
+ const actor = actors2[prop];
+ if (actor.wrap) {
+ actor.description = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.u.wrapLabel(
+ actor.description,
+ conf.width - 2 * conf.wrapPadding,
+ actorFont(conf)
+ );
+ }
+ const actDims = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions(actor.description, actorFont(conf));
+ actor.width = actor.wrap ? conf.width : _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(conf.width, actDims.width + 2 * conf.wrapPadding);
+ actor.height = actor.wrap ? _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(actDims.height, conf.height) : conf.height;
+ maxHeight = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(maxHeight, actor.height);
+ });
+ for (const actorKey in actorToMessageWidth) {
+ const actor = actors2[actorKey];
+ if (!actor) {
+ continue;
+ }
+ const nextActor = actors2[actor.nextActor];
+ if (!nextActor) {
+ const messageWidth2 = actorToMessageWidth[actorKey];
+ const actorWidth2 = messageWidth2 + conf.actorMargin - actor.width / 2;
+ actor.margin = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(actorWidth2, conf.actorMargin);
+ continue;
+ }
+ const messageWidth = actorToMessageWidth[actorKey];
+ const actorWidth = messageWidth + conf.actorMargin - actor.width / 2 - nextActor.width / 2;
+ actor.margin = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(actorWidth, conf.actorMargin);
+ }
+ let maxBoxHeight = 0;
+ boxes2.forEach((box) => {
+ const textFont = messageFont(conf);
+ let totalWidth = box.actorKeys.reduce((total, aKey) => {
+ return total += actors2[aKey].width + (actors2[aKey].margin || 0);
+ }, 0);
+ totalWidth -= 2 * conf.boxTextMargin;
+ if (box.wrap) {
+ box.name = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.u.wrapLabel(box.name, totalWidth - 2 * conf.wrapPadding, textFont);
+ }
+ const boxMsgDimensions = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions(box.name, textFont);
+ maxBoxHeight = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(boxMsgDimensions.height, maxBoxHeight);
+ const minWidth = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(totalWidth, boxMsgDimensions.width + 2 * conf.wrapPadding);
+ box.margin = conf.boxTextMargin;
+ if (totalWidth < minWidth) {
+ const missing = (minWidth - totalWidth) / 2;
+ box.margin += missing;
+ }
+ });
+ boxes2.forEach((box) => box.textMaxHeight = maxBoxHeight);
+ return _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(maxHeight, conf.height);
+}
+const buildNoteModel = function(msg, actors2, diagObj) {
+ const startx = actors2[msg.from].x;
+ const stopx = actors2[msg.to].x;
+ const shouldWrap = msg.wrap && msg.message;
+ let textDimensions = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions(
+ shouldWrap ? _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.u.wrapLabel(msg.message, conf.width, noteFont(conf)) : msg.message,
+ noteFont(conf)
+ );
+ const noteModel = {
+ width: shouldWrap ? conf.width : _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(conf.width, textDimensions.width + 2 * conf.noteMargin),
+ height: 0,
+ startx: actors2[msg.from].x,
+ stopx: 0,
+ starty: 0,
+ stopy: 0,
+ message: msg.message
+ };
+ if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF) {
+ noteModel.width = shouldWrap ? _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(conf.width, textDimensions.width) : _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(
+ actors2[msg.from].width / 2 + actors2[msg.to].width / 2,
+ textDimensions.width + 2 * conf.noteMargin
+ );
+ noteModel.startx = startx + (actors2[msg.from].width + conf.actorMargin) / 2;
+ } else if (msg.placement === diagObj.db.PLACEMENT.LEFTOF) {
+ noteModel.width = shouldWrap ? _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(conf.width, textDimensions.width + 2 * conf.noteMargin) : _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(
+ actors2[msg.from].width / 2 + actors2[msg.to].width / 2,
+ textDimensions.width + 2 * conf.noteMargin
+ );
+ noteModel.startx = startx - noteModel.width + (actors2[msg.from].width - conf.actorMargin) / 2;
+ } else if (msg.to === msg.from) {
+ textDimensions = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions(
+ shouldWrap ? _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.u.wrapLabel(
+ msg.message,
+ _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(conf.width, actors2[msg.from].width),
+ noteFont(conf)
+ ) : msg.message,
+ noteFont(conf)
+ );
+ noteModel.width = shouldWrap ? _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(conf.width, actors2[msg.from].width) : _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(
+ actors2[msg.from].width,
+ conf.width,
+ textDimensions.width + 2 * conf.noteMargin
+ );
+ noteModel.startx = startx + (actors2[msg.from].width - noteModel.width) / 2;
+ } else {
+ noteModel.width = Math.abs(startx + actors2[msg.from].width / 2 - (stopx + actors2[msg.to].width / 2)) + conf.actorMargin;
+ noteModel.startx = startx < stopx ? startx + actors2[msg.from].width / 2 - conf.actorMargin / 2 : stopx + actors2[msg.to].width / 2 - conf.actorMargin / 2;
+ }
+ if (shouldWrap) {
+ noteModel.message = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.u.wrapLabel(
+ msg.message,
+ noteModel.width - 2 * conf.wrapPadding,
+ noteFont(conf)
+ );
+ }
+ _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.l.debug(
+ `NM:[${noteModel.startx},${noteModel.stopx},${noteModel.starty},${noteModel.stopy}:${noteModel.width},${noteModel.height}=${msg.message}]`
+ );
+ return noteModel;
+};
+const buildMessageModel = 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
+ ].includes(msg.type)) {
+ return {};
+ }
+ const [fromLeft, fromRight] = activationBounds(msg.from, actors2);
+ const [toLeft, toRight] = activationBounds(msg.to, actors2);
+ const isArrowToRight = fromLeft <= toLeft;
+ const startx = isArrowToRight ? fromRight : fromLeft;
+ let stopx = isArrowToRight ? toLeft : toRight;
+ const isArrowToActivation = Math.abs(toLeft - toRight) > 2;
+ const adjustValue = (value) => {
+ return isArrowToRight ? -value : value;
+ };
+ if (msg.from === msg.to) {
+ stopx = startx;
+ } else {
+ if (msg.activate && !isArrowToActivation) {
+ stopx += adjustValue(conf.activationWidth / 2 - 1);
+ }
+ if (![diagObj.db.LINETYPE.SOLID_OPEN, diagObj.db.LINETYPE.DOTTED_OPEN].includes(msg.type)) {
+ stopx += adjustValue(3);
+ }
+ }
+ const allBounds = [fromLeft, fromRight, toLeft, toRight];
+ const boundedWidth = Math.abs(startx - stopx);
+ if (msg.wrap && msg.message) {
+ msg.message = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.u.wrapLabel(
+ msg.message,
+ _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(boundedWidth + 2 * conf.wrapPadding, conf.width),
+ messageFont(conf)
+ );
+ }
+ const msgDims = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.u.calculateTextDimensions(msg.message, messageFont(conf));
+ return {
+ width: _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(
+ msg.wrap ? 0 : msgDims.width + 2 * conf.wrapPadding,
+ boundedWidth + 2 * conf.wrapPadding,
+ conf.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)
+ };
+};
+const calculateLoopBounds = function(messages2, actors2, _maxWidthPerActor, diagObj) {
+ const loops = {};
+ const stack = [];
+ let current, noteModel, msgModel;
+ messages2.forEach(function(msg) {
+ msg.id = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.u.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[msg.from ? msg.from.actor : msg.to.actor];
+ const stackedSize = actorActivations(msg.from ? msg.from.actor : msg.to.actor).length;
+ const x = actorRect.x + actorRect.width / 2 + (stackedSize - 1) * conf.activationWidth / 2;
+ const toAdd = {
+ startx: x,
+ stopx: x + conf.activationWidth,
+ actor: msg.from.actor,
+ enabled: true
+ };
+ bounds.activations.push(toAdd);
+ }
+ break;
+ case diagObj.db.LINETYPE.ACTIVE_END:
+ {
+ const lastActorActivationIdx = bounds.activations.map((a) => a.actor).lastIndexOf(msg.from.actor);
+ delete bounds.activations.splice(lastActorActivationIdx, 1)[0];
+ }
+ break;
+ }
+ const isNote = msg.placement !== void 0;
+ if (isNote) {
+ noteModel = buildNoteModel(msg, actors2, diagObj);
+ msg.noteModel = noteModel;
+ stack.forEach((stk) => {
+ current = stk;
+ current.from = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMin(current.from, noteModel.startx);
+ current.to = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(current.to, noteModel.startx + noteModel.width);
+ current.width = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(current.width, Math.abs(current.from - current.to)) - conf.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 from = actors2[msg.from];
+ const to = actors2[msg.to];
+ current.from = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMin(
+ from.x - msgModel.width / 2,
+ from.x - from.width / 2,
+ current.from
+ );
+ current.to = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(
+ to.x + msgModel.width / 2,
+ to.x + from.width / 2,
+ current.to
+ );
+ current.width = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(current.width, Math.abs(current.to - current.from)) - conf.labelBoxWidth;
+ } else {
+ current.from = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMin(msgModel.startx, current.from);
+ current.to = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(msgModel.stopx, current.to);
+ current.width = _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.e.getMax(current.width, msgModel.width) - conf.labelBoxWidth;
+ }
+ });
+ }
+ }
+ });
+ bounds.activations = [];
+ _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_4__.l.debug("Loop type widths:", loops);
+ return loops;
+};
+const renderer = {
+ bounds,
+ drawActors,
+ drawActorsPopup,
+ setConf,
+ draw
+};
+const diagram = {
+ parser: parser$1,
+ db,
+ renderer,
+ styles,
+ init: ({ wrap }) => {
+ db.setWrap(wrap);
+ }
+};
+
+
+
+/***/ }),
+
+/***/ 15990:
+/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
+
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ a: () => (/* binding */ drawBackgroundRect),
+/* harmony export */ b: () => (/* binding */ drawEmbeddedImage),
+/* harmony export */ c: () => (/* binding */ drawImage),
+/* harmony export */ d: () => (/* binding */ drawRect),
+/* harmony export */ e: () => (/* binding */ getTextObj),
+/* harmony export */ f: () => (/* binding */ drawText),
+/* harmony export */ g: () => (/* binding */ getNoteRect)
+/* harmony export */ });
+/* harmony import */ var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(91088);
+/* harmony import */ var _mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(28000);
+
+
+const drawRect = (element, rectData) => {
+ const rectElement = element.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);
+ rectData.rx !== void 0 && rectElement.attr("rx", rectData.rx);
+ rectData.ry !== void 0 && rectElement.attr("ry", rectData.ry);
+ if (rectData.attrs !== void 0) {
+ for (const attrKey in rectData.attrs) {
+ rectElement.attr(attrKey, rectData.attrs[attrKey]);
+ }
+ }
+ rectData.class !== void 0 && rectElement.attr("class", rectData.class);
+ return rectElement;
+};
+const drawBackgroundRect = (element, bounds) => {
+ const rectData = {
+ x: bounds.startx,
+ y: bounds.starty,
+ width: bounds.stopx - bounds.startx,
+ height: bounds.stopy - bounds.starty,
+ fill: bounds.fill,
+ stroke: bounds.stroke,
+ class: "rect"
+ };
+ const rectElement = drawRect(element, rectData);
+ rectElement.lower();
+};
+const drawText = (element, textData) => {
+ const nText = textData.text.replace(_mermaid_934d9bea_js__WEBPACK_IMPORTED_MODULE_1__.H, " ");
+ const textElem = element.append("text");
+ textElem.attr("x", textData.x);
+ textElem.attr("y", textData.y);
+ textElem.attr("class", "legend");
+ textElem.style("text-anchor", textData.anchor);
+ textData.class !== void 0 && textElem.attr("class", textData.class);
+ const tspan = textElem.append("tspan");
+ tspan.attr("x", textData.x + textData.textMargin * 2);
+ tspan.text(nText);
+ return textElem;
+};
+const drawImage = (elem, x, y, link) => {
+ const imageElement = elem.append("image");
+ imageElement.attr("x", x);
+ imageElement.attr("y", y);
+ const sanitizedLink = (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__/* .sanitizeUrl */ .Nm)(link);
+ imageElement.attr("xlink:href", sanitizedLink);
+};
+const drawEmbeddedImage = (element, x, y, link) => {
+ const imageElement = element.append("use");
+ imageElement.attr("x", x);
+ imageElement.attr("y", y);
+ const sanitizedLink = (0,_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__/* .sanitizeUrl */ .Nm)(link);
+ imageElement.attr("xlink:href", `#${sanitizedLink}`);
+};
+const getNoteRect = () => {
+ const noteRectData = {
+ x: 0,
+ y: 0,
+ width: 100,
+ height: 100,
+ fill: "#EDF2AE",
+ stroke: "#666",
+ anchor: "start",
+ rx: 0,
+ ry: 0
+ };
+ return noteRectData;
+};
+const getTextObj = () => {
+ 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;
+};
+
+
+
+/***/ })
+
+};
+;
\ No newline at end of file
diff --git a/assets/js/3196ea8f.071ad6a7.js b/assets/js/3196ea8f.071ad6a7.js
deleted file mode 100644
index c1f0bd1a..00000000
--- a/assets/js/3196ea8f.071ad6a7.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[9425],{8134:e=>{e.exports=[]}}]);
\ No newline at end of file
diff --git a/assets/js/115e91bb.1c47d4f3.js b/assets/js/3196ea8f.4a19d2ad.js
similarity index 59%
copy from assets/js/115e91bb.1c47d4f3.js
copy to assets/js/3196ea8f.4a19d2ad.js
index 12b1af43..42689af3 100644
--- a/assets/js/115e91bb.1c47d4f3.js
+++ b/assets/js/3196ea8f.4a19d2ad.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[6208],{4292:e=>{e.exports=[]}}]);
\ No newline at end of file
+"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[9425],{78134:e=>{e.exports=[]}}]);
\ No newline at end of file
diff --git a/assets/js/3198.6f9adc87.js b/assets/js/3198.6f9adc87.js
new file mode 100644
index 00000000..bcc8125d
--- /dev/null
+++ b/assets/js/3198.6f9adc87.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkanswer=self.webpackChunkanswer||[]).push([[3198],{73198:(t,e,r)=>{r.d(e,{a:()=>l,b:()=>M,c:()=>o,d:()=>H,e:()=>v,f:()=>I,g:()=>W,h:()=>X,i:()=>f,j:()=>Y,l:()=>d,p:()=>T,s:()=>_,u:()=>c});var a=r(28e3),n=r(27509),i=r(3694);const s={extension:(t,e,r)=>{a.l.trace("Making markers for ",r),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionStart").attr("class","marker extension "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerH [...]
\ No newline at end of file
diff --git a/assets/js/32.97fad14b.js b/assets/js/32.97fad14b.js
new file mode 100644
index 00000000..acdea9a8
--- /dev/null
+++ b/assets/js/32.97fad14b.js
@@ -0,0 +1,10780 @@
+"use strict";
+exports.id = 32;
+exports.ids = [32];
+exports.modules = {
+
+/***/ 87892:
+/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
+
+
+// EXPORTS
+__webpack_require__.d(__webpack_exports__, {
+ bK: () => (/* reexport */ layout)
+});
+
+// UNUSED EXPORTS: acyclic, normalize, rank
+
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/forEach.js
+var forEach = __webpack_require__(79156);
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/uniqueId.js
+var uniqueId = __webpack_require__(59220);
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/has.js + 1 modules
+var has = __webpack_require__(27431);
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/constant.js
+var constant = __webpack_require__(6964);
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/flatten.js
+var flatten = __webpack_require__(23351);
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/map.js
+var map = __webpack_require__(55247);
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/range.js + 2 modules
+var range = __webpack_require__(57170);
+// EXTERNAL MODULE: ./node_modules/.pnpm/dagre-d3-es@7.0.10/node_modules/dagre-d3-es/src/graphlib/index.js
+var graphlib = __webpack_require__(42521);
+;// CONCATENATED MODULE: ./node_modules/.pnpm/dagre-d3-es@7.0.10/node_modules/dagre-d3-es/src/dagre/data/list.js
+/*
+ * Simple doubly linked list implementation derived from Cormen, et al.,
+ * "Introduction to Algorithms".
+ */
+
+
+
+class 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(', ') + ']';
+ }
+}
+
+function unlink(entry) {
+ entry._prev._next = entry._next;
+ entry._next._prev = entry._prev;
+ delete entry._next;
+ delete entry._prev;
+}
+
+function filterOutLinks(k, v) {
+ if (k !== '_next' && k !== '_prev') {
+ return v;
+ }
+}
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/dagre-d3-es@7.0.10/node_modules/dagre-d3-es/src/dagre/greedy-fas.js
+
+
+
+
+/*
+ * A greedy heuristic for finding a feedback arc set for a graph. A feedback
+ * arc set is a set of edges that can be removed to make a graph acyclic.
+ * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, "A fast and
+ * effective heuristic for the feedback arc set problem." This implementation
+ * adjusts that from the paper to allow for weighted edges.
+ */
+
+
+var DEFAULT_WEIGHT_FN = constant/* default */.Z(1);
+
+function greedyFAS(g, weightFn) {
+ if (g.nodeCount() <= 1) {
+ return [];
+ }
+ var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN);
+ var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx);
+
+ // Expand multi-edges
+ return flatten/* default */.Z(
+ map/* default */.Z(results, function (e) {
+ return g.outEdges(e.v, e.w);
+ })
+ );
+}
+
+function doGreedyFAS(g, buckets, zeroIdx) {
+ var results = [];
+ var sources = buckets[buckets.length - 1];
+ var sinks = buckets[0];
+
+ var entry;
+ while (g.nodeCount()) {
+ while ((entry = sinks.dequeue())) {
+ removeNode(g, buckets, zeroIdx, entry);
+ }
+ while ((entry = sources.dequeue())) {
+ removeNode(g, buckets, zeroIdx, entry);
+ }
+ if (g.nodeCount()) {
+ for (var i = buckets.length - 2; i > 0; --i) {
+ entry = buckets[i].dequeue();
+ if (entry) {
+ results = results.concat(removeNode(g, buckets, zeroIdx, entry, true));
+ break;
+ }
+ }
+ }
+ }
+
+ return results;
+}
+
+function removeNode(g, buckets, zeroIdx, entry, collectPredecessors) {
+ var results = collectPredecessors ? [] : undefined;
+
+ forEach/* default */.Z(g.inEdges(entry.v), function (edge) {
+ var weight = g.edge(edge);
+ var uEntry = g.node(edge.v);
+
+ if (collectPredecessors) {
+ results.push({ v: edge.v, w: edge.w });
+ }
+
+ uEntry.out -= weight;
+ assignBucket(buckets, zeroIdx, uEntry);
+ });
+
+ forEach/* default */.Z(g.outEdges(entry.v), function (edge) {
+ var weight = g.edge(edge);
+ var w = edge.w;
+ var wEntry = g.node(w);
+ wEntry['in'] -= weight;
+ assignBucket(buckets, zeroIdx, wEntry);
+ });
+
+ g.removeNode(entry.v);
+
+ return results;
+}
+
+function buildState(g, weightFn) {
+ var fasGraph = new graphlib/* Graph */.k();
+ var maxIn = 0;
+ var maxOut = 0;
+
+ forEach/* default */.Z(g.nodes(), function (v) {
+ fasGraph.setNode(v, { v: v, in: 0, out: 0 });
+ });
+
+ // Aggregate weights on nodes, but also sum the weights across multi-edges
+ // into a single edge for the fasGraph.
+ forEach/* default */.Z(g.edges(), function (e) {
+ var prevWeight = fasGraph.edge(e.v, e.w) || 0;
+ var weight = weightFn(e);
+ var edgeWeight = prevWeight + weight;
+ fasGraph.setEdge(e.v, e.w, edgeWeight);
+ maxOut = Math.max(maxOut, (fasGraph.node(e.v).out += weight));
+ maxIn = Math.max(maxIn, (fasGraph.node(e.w)['in'] += weight));
+ });
+
+ var buckets = range/* default */.Z(maxOut + maxIn + 3).map(function () {
+ return new List();
+ });
+ var zeroIdx = maxIn + 1;
+
+ forEach/* default */.Z(fasGraph.nodes(), function (v) {
+ assignBucket(buckets, zeroIdx, fasGraph.node(v));
+ });
+
+ return { graph: fasGraph, buckets: buckets, zeroIdx: 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);
+ }
+}
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/dagre-d3-es@7.0.10/node_modules/dagre-d3-es/src/dagre/acyclic.js
+
+
+
+
+
+function run(g) {
+ var fas = g.graph().acyclicer === 'greedy' ? greedyFAS(g, weightFn(g)) : dfsFAS(g);
+ forEach/* default */.Z(fas, function (e) {
+ var label = g.edge(e);
+ g.removeEdge(e);
+ label.forwardName = e.name;
+ label.reversed = true;
+ g.setEdge(e.w, e.v, label, uniqueId/* default */.Z('rev'));
+ });
+
+ function weightFn(g) {
+ return function (e) {
+ return g.edge(e).weight;
+ };
+ }
+}
+
+function dfsFAS(g) {
+ var fas = [];
+ var stack = {};
+ var visited = {};
+
+ function dfs(v) {
+ if (has/* default */.Z(visited, v)) {
+ return;
+ }
+ visited[v] = true;
+ stack[v] = true;
+ forEach/* default */.Z(g.outEdges(v), function (e) {
+ if (has/* default */.Z(stack, e.w)) {
+ fas.push(e);
+ } else {
+ dfs(e.w);
+ }
+ });
+ delete stack[v];
+ }
+
+ forEach/* default */.Z(g.nodes(), dfs);
+ return fas;
+}
+
+function undo(g) {
+ forEach/* default */.Z(g.edges(), function (e) {
+ var label = g.edge(e);
+ if (label.reversed) {
+ g.removeEdge(e);
+
+ var forwardName = label.forwardName;
+ delete label.reversed;
+ delete label.forwardName;
+ g.setEdge(e.w, e.v, label, forwardName);
+ }
+ });
+}
+
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/merge.js + 6 modules
+var merge = __webpack_require__(64546);
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/pick.js + 4 modules
+var pick = __webpack_require__(77524);
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/defaults.js
+var defaults = __webpack_require__(70374);
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isSymbol.js
+var isSymbol = __webpack_require__(98111);
+;// CONCATENATED MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseExtremum.js
+
+
+/**
+ * The base implementation of methods like `_.max` and `_.min` which accepts a
+ * `comparator` to determine the extremum value.
+ *
+ * @private
+ * @param {Array} array The array to iterate over.
+ * @param {Function} iteratee The iteratee invoked per iteration.
+ * @param {Function} comparator The comparator used to compare values.
+ * @returns {*} Returns the extremum value.
+ */
+function baseExtremum(array, iteratee, comparator) {
+ var index = -1,
+ length = array.length;
+
+ while (++index < length) {
+ var value = array[index],
+ current = iteratee(value);
+
+ if (current != null && (computed === undefined
+ ? (current === current && !(0,isSymbol/* default */.Z)(current))
+ : comparator(current, computed)
+ )) {
+ var computed = current,
+ result = value;
+ }
+ }
+ return result;
+}
+
+/* harmony default export */ const _baseExtremum = (baseExtremum);
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseGt.js
+/**
+ * The base implementation of `_.gt` which doesn't coerce arguments.
+ *
+ * @private
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {boolean} Returns `true` if `value` is greater than `other`,
+ * else `false`.
+ */
+function baseGt(value, other) {
+ return value > other;
+}
+
+/* harmony default export */ const _baseGt = (baseGt);
+
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/identity.js
+var identity = __webpack_require__(76402);
+;// CONCATENATED MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/max.js
+
+
+
+
+/**
+ * Computes the maximum value of `array`. If `array` is empty or falsey,
+ * `undefined` is returned.
+ *
+ * @static
+ * @since 0.1.0
+ * @memberOf _
+ * @category Math
+ * @param {Array} array The array to iterate over.
+ * @returns {*} Returns the maximum value.
+ * @example
+ *
+ * _.max([4, 2, 8, 6]);
+ * // => 8
+ *
+ * _.max([]);
+ * // => undefined
+ */
+function max(array) {
+ return (array && array.length)
+ ? _baseExtremum(array, identity/* default */.Z, _baseGt)
+ : undefined;
+}
+
+/* harmony default export */ const lodash_es_max = (max);
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/last.js
+/**
+ * Gets the last element of `array`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Array
+ * @param {Array} array The array to query.
+ * @returns {*} Returns the last element of `array`.
+ * @example
+ *
+ * _.last([1, 2, 3]);
+ * // => 3
+ */
+function last(array) {
+ var length = array == null ? 0 : array.length;
+ return length ? array[length - 1] : undefined;
+}
+
+/* harmony default export */ const lodash_es_last = (last);
+
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseAssignValue.js
+var _baseAssignValue = __webpack_require__(857);
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseForOwn.js
+var _baseForOwn = __webpack_require__(52110);
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIteratee.js + 16 modules
+var _baseIteratee = __webpack_require__(50637);
+;// CONCATENATED MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/mapValues.js
+
+
+
+
+/**
+ * Creates an object with the same keys as `object` and values generated
+ * by running each own enumerable string keyed property of `object` thru
+ * `iteratee`. The iteratee is invoked with three arguments:
+ * (value, key, object).
+ *
+ * @static
+ * @memberOf _
+ * @since 2.4.0
+ * @category Object
+ * @param {Object} object The object to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @returns {Object} Returns the new mapped object.
+ * @see _.mapKeys
+ * @example
+ *
+ * var users = {
+ * 'fred': { 'user': 'fred', 'age': 40 },
+ * 'pebbles': { 'user': 'pebbles', 'age': 1 }
+ * };
+ *
+ * _.mapValues(users, function(o) { return o.age; });
+ * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.mapValues(users, 'age');
+ * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
+ */
+function mapValues(object, iteratee) {
+ var result = {};
+ iteratee = (0,_baseIteratee/* default */.Z)(iteratee, 3);
+
+ (0,_baseForOwn/* default */.Z)(object, function(value, key, object) {
+ (0,_baseAssignValue/* default */.Z)(result, key, iteratee(value, key, object));
+ });
+ return result;
+}
+
+/* harmony default export */ const lodash_es_mapValues = (mapValues);
+
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isUndefined.js
+var isUndefined = __webpack_require__(71180);
+;// CONCATENATED MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseLt.js
+/**
+ * The base implementation of `_.lt` which doesn't coerce arguments.
+ *
+ * @private
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {boolean} Returns `true` if `value` is less than `other`,
+ * else `false`.
+ */
+function baseLt(value, other) {
+ return value < other;
+}
+
+/* harmony default export */ const _baseLt = (baseLt);
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/min.js
+
+
+
+
+/**
+ * Computes the minimum value of `array`. If `array` is empty or falsey,
+ * `undefined` is returned.
+ *
+ * @static
+ * @since 0.1.0
+ * @memberOf _
+ * @category Math
+ * @param {Array} array The array to iterate over.
+ * @returns {*} Returns the minimum value.
+ * @example
+ *
+ * _.min([4, 2, 8, 6]);
+ * // => 2
+ *
+ * _.min([]);
+ * // => undefined
+ */
+function min(array) {
+ return (array && array.length)
+ ? _baseExtremum(array, identity/* default */.Z, _baseLt)
+ : undefined;
+}
+
+/* harmony default export */ const lodash_es_min = (min);
+
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_root.js
+var _root = __webpack_require__(99615);
+;// CONCATENATED MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/now.js
+
+
+/**
+ * Gets the timestamp of the number of milliseconds that have elapsed since
+ * the Unix epoch (1 January 1970 00:00:00 UTC).
+ *
+ * @static
+ * @memberOf _
+ * @since 2.4.0
+ * @category Date
+ * @returns {number} Returns the timestamp.
+ * @example
+ *
+ * _.defer(function(stamp) {
+ * console.log(_.now() - stamp);
+ * }, _.now());
+ * // => Logs the number of milliseconds it took for the deferred invocation.
+ */
+var now = function() {
+ return _root/* default */.Z.Date.now();
+};
+
+/* harmony default export */ const lodash_es_now = (now);
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/dagre-d3-es@7.0.10/node_modules/dagre-d3-es/src/dagre/util.js
+
+
+
+
+
+/*
+ * Adds a dummy node to the graph and return v.
+ */
+function addDummyNode(g, type, attrs, name) {
+ var v;
+ do {
+ v = uniqueId/* default */.Z(name);
+ } while (g.hasNode(v));
+
+ attrs.dummy = type;
+ g.setNode(v, attrs);
+ return v;
+}
+
+/*
+ * Returns a new graph with only simple edges. Handles aggregation of data
+ * associated with multi-edges.
+ */
+function simplify(g) {
+ var simplified = new graphlib/* Graph */.k().setGraph(g.graph());
+ forEach/* default */.Z(g.nodes(), function (v) {
+ simplified.setNode(v, g.node(v));
+ });
+ forEach/* default */.Z(g.edges(), function (e) {
+ var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 };
+ var label = g.edge(e);
+ simplified.setEdge(e.v, e.w, {
+ weight: simpleLabel.weight + label.weight,
+ minlen: Math.max(simpleLabel.minlen, label.minlen),
+ });
+ });
+ return simplified;
+}
+
+function asNonCompoundGraph(g) {
+ var simplified = new graphlib/* Graph */.k({ multigraph: g.isMultigraph() }).setGraph(g.graph());
+ forEach/* default */.Z(g.nodes(), function (v) {
+ if (!g.children(v).length) {
+ simplified.setNode(v, g.node(v));
+ }
+ });
+ forEach/* default */.Z(g.edges(), function (e) {
+ simplified.setEdge(e, g.edge(e));
+ });
+ return simplified;
+}
+
+function successorWeights(g) {
+ var weightMap = _.map(g.nodes(), function (v) {
+ var sucs = {};
+ _.forEach(g.outEdges(v), function (e) {
+ sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight;
+ });
+ return sucs;
+ });
+ return _.zipObject(g.nodes(), weightMap);
+}
+
+function predecessorWeights(g) {
+ var weightMap = _.map(g.nodes(), function (v) {
+ var preds = {};
+ _.forEach(g.inEdges(v), function (e) {
+ preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight;
+ });
+ return preds;
+ });
+ return _.zipObject(g.nodes(), weightMap);
+}
+
+/*
+ * Finds where a line starting at point ({x, y}) would intersect a rectangle
+ * ({x, y, width, height}) if it were pointing at the rectangle's center.
+ */
+function intersectRect(rect, point) {
+ var x = rect.x;
+ var y = rect.y;
+
+ // Rectangle intersection algorithm from:
+ // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes
+ var dx = point.x - x;
+ var dy = point.y - y;
+ var w = rect.width / 2;
+ var h = rect.height / 2;
+
+ if (!dx && !dy) {
+ throw new Error('Not possible to find intersection inside of the rectangle');
+ }
+
+ var sx, sy;
+ if (Math.abs(dy) * w > Math.abs(dx) * h) {
+ // Intersection is top or bottom of rect.
+ if (dy < 0) {
+ h = -h;
+ }
+ sx = (h * dx) / dy;
+ sy = h;
+ } else {
+ // Intersection is left or right of rect.
+ if (dx < 0) {
+ w = -w;
+ }
+ sx = w;
+ sy = (w * dy) / dx;
+ }
+
+ return { x: x + sx, y: y + sy };
+}
+
+/*
+ * Given a DAG with each node assigned "rank" and "order" properties, this
+ * function will produce a matrix with the ids of each node.
+ */
+function buildLayerMatrix(g) {
+ var layering = map/* default */.Z(range/* default */.Z(util_maxRank(g) + 1), function () {
+ return [];
+ });
+ forEach/* default */.Z(g.nodes(), function (v) {
+ var node = g.node(v);
+ var rank = node.rank;
+ if (!isUndefined/* default */.Z(rank)) {
+ layering[rank][node.order] = v;
+ }
+ });
+ return layering;
+}
+
+/*
+ * Adjusts the ranks for all nodes in the graph such that all nodes v have
+ * rank(v) >= 0 and at least one node w has rank(w) = 0.
+ */
+function normalizeRanks(g) {
+ var min = lodash_es_min(
+ map/* default */.Z(g.nodes(), function (v) {
+ return g.node(v).rank;
+ })
+ );
+ forEach/* default */.Z(g.nodes(), function (v) {
+ var node = g.node(v);
+ if (has/* default */.Z(node, 'rank')) {
+ node.rank -= min;
+ }
+ });
+}
+
+function removeEmptyRanks(g) {
+ // Ranks may not start at 0, so we need to offset them
+ var offset = lodash_es_min(
+ map/* default */.Z(g.nodes(), function (v) {
+ return g.node(v).rank;
+ })
+ );
+
+ var layers = [];
+ forEach/* default */.Z(g.nodes(), function (v) {
+ var rank = g.node(v).rank - offset;
+ if (!layers[rank]) {
+ layers[rank] = [];
+ }
+ layers[rank].push(v);
+ });
+
+ var delta = 0;
+ var nodeRankFactor = g.graph().nodeRankFactor;
+ forEach/* default */.Z(layers, function (vs, i) {
+ if (isUndefined/* default */.Z(vs) && i % nodeRankFactor !== 0) {
+ --delta;
+ } else if (delta) {
+ forEach/* default */.Z(vs, function (v) {
+ g.node(v).rank += delta;
+ });
+ }
+ });
+}
+
+function addBorderNode(g, prefix, rank, order) {
+ var node = {
+ width: 0,
+ height: 0,
+ };
+ if (arguments.length >= 4) {
+ node.rank = rank;
+ node.order = order;
+ }
+ return addDummyNode(g, 'border', node, prefix);
+}
+
+function util_maxRank(g) {
+ return lodash_es_max(
+ map/* default */.Z(g.nodes(), function (v) {
+ var rank = g.node(v).rank;
+ if (!isUndefined/* default */.Z(rank)) {
+ return rank;
+ }
+ })
+ );
+}
+
+/*
+ * Partition a collection into two groups: `lhs` and `rhs`. If the supplied
+ * function returns true for an entry it goes into `lhs`. Otherwise it goes
+ * into `rhs.
+ */
+function partition(collection, fn) {
+ var result = { lhs: [], rhs: [] };
+ forEach/* default */.Z(collection, function (value) {
+ if (fn(value)) {
+ result.lhs.push(value);
+ } else {
+ result.rhs.push(value);
+ }
+ });
+ return result;
+}
+
+/*
+ * Returns a new function that wraps `fn` with a timer. The wrapper logs the
+ * time it takes to execute the function.
+ */
+function util_time(name, fn) {
+ var start = lodash_es_now();
+ try {
+ return fn();
+ } finally {
+ console.log(name + ' time: ' + (lodash_es_now() - start) + 'ms');
+ }
+}
+
+function notime(name, fn) {
+ return fn();
+}
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/dagre-d3-es@7.0.10/node_modules/dagre-d3-es/src/dagre/add-border-segments.js
+
+
+
+
+
+function addBorderSegments(g) {
+ function dfs(v) {
+ var children = g.children(v);
+ var node = g.node(v);
+ if (children.length) {
+ forEach/* default */.Z(children, dfs);
+ }
+
+ if (has/* default */.Z(node, 'minRank')) {
+ node.borderLeft = [];
+ node.borderRight = [];
+ for (var rank = node.minRank, maxRank = node.maxRank + 1; rank < maxRank; ++rank) {
+ add_border_segments_addBorderNode(g, 'borderLeft', '_bl', v, node, rank);
+ add_border_segments_addBorderNode(g, 'borderRight', '_br', v, node, rank);
+ }
+ }
+ }
+
+ forEach/* default */.Z(g.children(), dfs);
+}
+
+function add_border_segments_addBorderNode(g, prop, prefix, sg, sgNode, rank) {
+ var label = { width: 0, height: 0, rank: rank, borderType: prop };
+ var prev = sgNode[prop][rank - 1];
+ var curr = addDummyNode(g, 'border', label, prefix);
+ sgNode[prop][rank] = curr;
+ g.setParent(curr, sg);
+ if (prev) {
+ g.setEdge(prev, curr, { weight: 1 });
+ }
+}
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/dagre-d3-es@7.0.10/node_modules/dagre-d3-es/src/dagre/coordinate-system.js
+
+
+
+
+function adjust(g) {
+ var rankDir = g.graph().rankdir.toLowerCase();
+ if (rankDir === 'lr' || rankDir === 'rl') {
+ swapWidthHeight(g);
+ }
+}
+
+function coordinate_system_undo(g) {
+ var rankDir = g.graph().rankdir.toLowerCase();
+ if (rankDir === 'bt' || rankDir === 'rl') {
+ reverseY(g);
+ }
+
+ if (rankDir === 'lr' || rankDir === 'rl') {
+ swapXY(g);
+ swapWidthHeight(g);
+ }
+}
+
+function swapWidthHeight(g) {
+ forEach/* default */.Z(g.nodes(), function (v) {
+ swapWidthHeightOne(g.node(v));
+ });
+ forEach/* default */.Z(g.edges(), function (e) {
+ swapWidthHeightOne(g.edge(e));
+ });
+}
+
+function swapWidthHeightOne(attrs) {
+ var w = attrs.width;
+ attrs.width = attrs.height;
+ attrs.height = w;
+}
+
+function reverseY(g) {
+ forEach/* default */.Z(g.nodes(), function (v) {
+ reverseYOne(g.node(v));
+ });
+
+ forEach/* default */.Z(g.edges(), function (e) {
+ var edge = g.edge(e);
+ forEach/* default */.Z(edge.points, reverseYOne);
+ if (has/* default */.Z(edge, 'y')) {
+ reverseYOne(edge);
+ }
+ });
+}
+
+function reverseYOne(attrs) {
+ attrs.y = -attrs.y;
+}
+
+function swapXY(g) {
+ forEach/* default */.Z(g.nodes(), function (v) {
+ swapXYOne(g.node(v));
+ });
+
+ forEach/* default */.Z(g.edges(), function (e) {
+ var edge = g.edge(e);
+ forEach/* default */.Z(edge.points, swapXYOne);
+ if (has/* default */.Z(edge, 'x')) {
+ swapXYOne(edge);
+ }
+ });
+}
+
+function swapXYOne(attrs) {
+ var x = attrs.x;
+ attrs.x = attrs.y;
+ attrs.y = x;
+}
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/dagre-d3-es@7.0.10/node_modules/dagre-d3-es/src/dagre/normalize.js
+
+
+
+
+
+/*
+ * Breaks any long edges in the graph into short segments that span 1 layer
+ * each. This operation is undoable with the denormalize function.
+ *
+ * Pre-conditions:
+ *
+ * 1. The input graph is a DAG.
+ * 2. Each node in the graph has a "rank" property.
+ *
+ * Post-condition:
+ *
+ * 1. All edges in the graph have a length of 1.
+ * 2. Dummy nodes are added where edges have been split into segments.
+ * 3. The graph is augmented with a "dummyChains" attribute which contains
+ * the first dummy in each chain of dummy nodes produced.
+ */
+function normalize_run(g) {
+ g.graph().dummyChains = [];
+ forEach/* default */.Z(g.edges(), function (edge) {
+ normalizeEdge(g, edge);
+ });
+}
+
+function normalizeEdge(g, e) {
+ var v = e.v;
+ var vRank = g.node(v).rank;
+ var w = e.w;
+ var wRank = g.node(w).rank;
+ var name = e.name;
+ var edgeLabel = g.edge(e);
+ var labelRank = edgeLabel.labelRank;
+
+ if (wRank === vRank + 1) return;
+
+ g.removeEdge(e);
+
+ var dummy, attrs, i;
+ for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) {
+ edgeLabel.points = [];
+ attrs = {
+ width: 0,
+ height: 0,
+ edgeLabel: edgeLabel,
+ edgeObj: e,
+ rank: vRank,
+ };
+ dummy = addDummyNode(g, 'edge', attrs, '_d');
+ if (vRank === labelRank) {
+ attrs.width = edgeLabel.width;
+ attrs.height = edgeLabel.height;
+ // @ts-expect-error
+ attrs.dummy = 'edge-label';
+ // @ts-expect-error
+ attrs.labelpos = edgeLabel.labelpos;
+ }
+ g.setEdge(v, dummy, { weight: edgeLabel.weight }, name);
+ if (i === 0) {
+ g.graph().dummyChains.push(dummy);
+ }
+ v = dummy;
+ }
+
+ g.setEdge(v, w, { weight: edgeLabel.weight }, name);
+}
+
+function normalize_undo(g) {
+ forEach/* default */.Z(g.graph().dummyChains, function (v) {
+ var node = g.node(v);
+ var origLabel = node.edgeLabel;
+ var w;
+ g.setEdge(node.edgeObj, origLabel);
+ while (node.dummy) {
+ w = g.successors(v)[0];
+ g.removeNode(v);
+ origLabel.points.push({ x: node.x, y: node.y });
+ if (node.dummy === 'edge-label') {
+ origLabel.x = node.x;
+ origLabel.y = node.y;
+ origLabel.width = node.width;
+ origLabel.height = node.height;
+ }
+ v = w;
+ node = g.node(v);
+ }
+ });
+}
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/minBy.js
+
+
+
+
+/**
+ * This method is like `_.min` except that it accepts `iteratee` which is
+ * invoked for each element in `array` to generate the criterion by which
+ * the value is ranked. The iteratee is invoked with one argument: (value).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Math
+ * @param {Array} array The array to iterate over.
+ * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
+ * @returns {*} Returns the minimum value.
+ * @example
+ *
+ * var objects = [{ 'n': 1 }, { 'n': 2 }];
+ *
+ * _.minBy(objects, function(o) { return o.n; });
+ * // => { 'n': 1 }
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.minBy(objects, 'n');
+ * // => { 'n': 1 }
+ */
+function minBy(array, iteratee) {
+ return (array && array.length)
+ ? _baseExtremum(array, (0,_baseIteratee/* default */.Z)(iteratee, 2), _baseLt)
+ : undefined;
+}
+
+/* harmony default export */ const lodash_es_minBy = (minBy);
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/dagre-d3-es@7.0.10/node_modules/dagre-d3-es/src/dagre/rank/util.js
+
+
+
+
+/*
+ * Initializes ranks for the input graph using the longest path algorithm. This
+ * algorithm scales well and is fast in practice, it yields rather poor
+ * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom
+ * ranks wide and leaving edges longer than necessary. However, due to its
+ * speed, this algorithm is good for getting an initial ranking that can be fed
+ * into other algorithms.
+ *
+ * This algorithm does not normalize layers because it will be used by other
+ * algorithms in most cases. If using this algorithm directly, be sure to
+ * run normalize at the end.
+ *
+ * Pre-conditions:
+ *
+ * 1. Input graph is a DAG.
+ * 2. Input graph node labels can be assigned properties.
+ *
+ * Post-conditions:
+ *
+ * 1. Each node will be assign an (unnormalized) "rank" property.
+ */
+function longestPath(g) {
+ var visited = {};
+
+ function dfs(v) {
+ var label = g.node(v);
+ if (has/* default */.Z(visited, v)) {
+ return label.rank;
+ }
+ visited[v] = true;
+
+ var rank = lodash_es_min(
+ map/* default */.Z(g.outEdges(v), function (e) {
+ return dfs(e.w) - g.edge(e).minlen;
+ })
+ );
+
+ if (
+ rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3
+ rank === undefined || // return value of _.map([]) for Lodash 4
+ rank === null
+ ) {
+ // return value of _.map([null])
+ rank = 0;
+ }
+
+ return (label.rank = rank);
+ }
+
+ forEach/* default */.Z(g.sources(), dfs);
+}
+
+/*
+ * Returns the amount of slack for the given edge. The slack is defined as the
+ * difference between the length of the edge and its minimum length.
+ */
+function slack(g, e) {
+ return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen;
+}
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/dagre-d3-es@7.0.10/node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js
+
+
+
+
+
+
+/*
+ * Constructs a spanning tree with tight edges and adjusted the input node's
+ * ranks to achieve this. A tight edge is one that is has a length that matches
+ * its "minlen" attribute.
+ *
+ * The basic structure for this function is derived from Gansner, et al., "A
+ * Technique for Drawing Directed Graphs."
+ *
+ * Pre-conditions:
+ *
+ * 1. Graph must be a DAG.
+ * 2. Graph must be connected.
+ * 3. Graph must have at least one node.
+ * 5. Graph nodes must have been previously assigned a "rank" property that
+ * respects the "minlen" property of incident edges.
+ * 6. Graph edges must have a "minlen" property.
+ *
+ * Post-conditions:
+ *
+ * - Graph nodes will have their rank adjusted to ensure that all edges are
+ * tight.
+ *
+ * Returns a tree (undirected graph) that is constructed using only "tight"
+ * edges.
+ */
+function feasibleTree(g) {
+ var t = new graphlib/* Graph */.k({ directed: false });
+
+ // Choose arbitrary node from which to start our tree
+ var start = g.nodes()[0];
+ var size = g.nodeCount();
+ t.setNode(start, {});
+
+ var edge, delta;
+ while (tightTree(t, g) < size) {
+ edge = findMinSlackEdge(t, g);
+ delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge);
+ shiftRanks(t, g, delta);
+ }
+
+ return t;
+}
+
+/*
+ * Finds a maximal tree of tight edges and returns the number of nodes in the
+ * tree.
+ */
+function tightTree(t, g) {
+ function dfs(v) {
+ forEach/* default */.Z(g.nodeEdges(v), function (e) {
+ var edgeV = e.v,
+ w = v === edgeV ? e.w : edgeV;
+ if (!t.hasNode(w) && !slack(g, e)) {
+ t.setNode(w, {});
+ t.setEdge(v, w, {});
+ dfs(w);
+ }
+ });
+ }
+
+ forEach/* default */.Z(t.nodes(), dfs);
+ return t.nodeCount();
+}
+
+/*
+ * Finds the edge with the smallest slack that is incident on tree and returns
+ * it.
+ */
+function findMinSlackEdge(t, g) {
+ return lodash_es_minBy(g.edges(), function (e) {
+ if (t.hasNode(e.v) !== t.hasNode(e.w)) {
+ return slack(g, e);
+ }
+ });
+}
+
+function shiftRanks(t, g, delta) {
+ forEach/* default */.Z(t.nodes(), function (v) {
+ g.node(v).rank += delta;
+ });
+}
+
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isArrayLike.js
+var isArrayLike = __webpack_require__(49634);
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/keys.js
+var keys = __webpack_require__(77251);
+;// CONCATENATED MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createFind.js
+
+
+
+
+/**
+ * Creates a `_.find` or `_.findLast` function.
+ *
+ * @private
+ * @param {Function} findIndexFunc The function to find the collection index.
+ * @returns {Function} Returns the new find function.
+ */
+function createFind(findIndexFunc) {
+ return function(collection, predicate, fromIndex) {
+ var iterable = Object(collection);
+ if (!(0,isArrayLike/* default */.Z)(collection)) {
+ var iteratee = (0,_baseIteratee/* default */.Z)(predicate, 3);
+ collection = (0,keys/* default */.Z)(collection);
+ predicate = function(key) { return iteratee(iterable[key], key, iterable); };
+ }
+ var index = findIndexFunc(collection, predicate, fromIndex);
+ return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;
+ };
+}
+
+/* harmony default export */ const _createFind = (createFind);
+
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseFindIndex.js
+var _baseFindIndex = __webpack_require__(57394);
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/toFinite.js + 3 modules
+var toFinite = __webpack_require__(32200);
+;// CONCATENATED MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/toInteger.js
+
+
+/**
+ * Converts `value` to an integer.
+ *
+ * **Note:** This method is loosely based on
+ * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to convert.
+ * @returns {number} Returns the converted integer.
+ * @example
+ *
+ * _.toInteger(3.2);
+ * // => 3
+ *
+ * _.toInteger(Number.MIN_VALUE);
+ * // => 0
+ *
+ * _.toInteger(Infinity);
+ * // => 1.7976931348623157e+308
+ *
+ * _.toInteger('3.2');
+ * // => 3
+ */
+function toInteger(value) {
+ var result = (0,toFinite/* default */.Z)(value),
+ remainder = result % 1;
+
+ return result === result ? (remainder ? result - remainder : result) : 0;
+}
+
+/* harmony default export */ const lodash_es_toInteger = (toInteger);
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/findIndex.js
+
+
+
+
+/* Built-in method references for those with the same name as other `lodash` methods. */
+var nativeMax = Math.max;
+
+/**
+ * This method is like `_.find` except that it returns the index of the first
+ * element `predicate` returns truthy for instead of the element itself.
+ *
+ * @static
+ * @memberOf _
+ * @since 1.1.0
+ * @category Array
+ * @param {Array} array The array to inspect.
+ * @param {Function} [predicate=_.identity] The function invoked per iteration.
+ * @param {number} [fromIndex=0] The index to search from.
+ * @returns {number} Returns the index of the found element, else `-1`.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'active': false },
+ * { 'user': 'fred', 'active': false },
+ * { 'user': 'pebbles', 'active': true }
+ * ];
+ *
+ * _.findIndex(users, function(o) { return o.user == 'barney'; });
+ * // => 0
+ *
+ * // The `_.matches` iteratee shorthand.
+ * _.findIndex(users, { 'user': 'fred', 'active': false });
+ * // => 1
+ *
+ * // The `_.matchesProperty` iteratee shorthand.
+ * _.findIndex(users, ['active', false]);
+ * // => 0
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.findIndex(users, 'active');
+ * // => 2
+ */
+function findIndex(array, predicate, fromIndex) {
+ var length = array == null ? 0 : array.length;
+ if (!length) {
+ return -1;
+ }
+ var index = fromIndex == null ? 0 : lodash_es_toInteger(fromIndex);
+ if (index < 0) {
+ index = nativeMax(length + index, 0);
+ }
+ return (0,_baseFindIndex/* default */.Z)(array, (0,_baseIteratee/* default */.Z)(predicate, 3), index);
+}
+
+/* harmony default export */ const lodash_es_findIndex = (findIndex);
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/find.js
+
+
+
+/**
+ * Iterates over elements of `collection`, returning the first element
+ * `predicate` returns truthy for. The predicate is invoked with three
+ * arguments: (value, index|key, collection).
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to inspect.
+ * @param {Function} [predicate=_.identity] The function invoked per iteration.
+ * @param {number} [fromIndex=0] The index to search from.
+ * @returns {*} Returns the matched element, else `undefined`.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36, 'active': true },
+ * { 'user': 'fred', 'age': 40, 'active': false },
+ * { 'user': 'pebbles', 'age': 1, 'active': true }
+ * ];
+ *
+ * _.find(users, function(o) { return o.age < 40; });
+ * // => object for 'barney'
+ *
+ * // The `_.matches` iteratee shorthand.
+ * _.find(users, { 'age': 1, 'active': true });
+ * // => object for 'pebbles'
+ *
+ * // The `_.matchesProperty` iteratee shorthand.
+ * _.find(users, ['active', false]);
+ * // => object for 'fred'
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.find(users, 'active');
+ * // => object for 'barney'
+ */
+var find = _createFind(lodash_es_findIndex);
+
+/* harmony default export */ const lodash_es_find = (find);
+
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/filter.js + 1 modules
+var filter = __webpack_require__(38364);
+;// CONCATENATED MODULE: ./node_modules/.pnpm/dagre-d3-es@7.0.10/node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js
+
+
+
+
+
+var DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1);
+
+function dijkstra_dijkstra(g, source, weightFn, edgeFn) {
+ return runDijkstra(
+ g,
+ String(source),
+ weightFn || DEFAULT_WEIGHT_FUNC,
+ edgeFn ||
+ function (v) {
+ return g.outEdges(v);
+ }
+ );
+}
+
+function runDijkstra(g, source, weightFn, edgeFn) {
+ var results = {};
+ var pq = new PriorityQueue();
+ var v, vEntry;
+
+ var updateNeighbors = function (edge) {
+ var w = edge.v !== v ? edge.v : edge.w;
+ var wEntry = results[w];
+ var weight = weightFn(edge);
+ var distance = vEntry.distance + weight;
+
+ if (weight < 0) {
+ throw new Error(
+ 'dijkstra does not allow negative edge weights. ' +
+ 'Bad edge: ' +
+ edge +
+ ' Weight: ' +
+ weight
+ );
+ }
+
+ if (distance < wEntry.distance) {
+ wEntry.distance = distance;
+ wEntry.predecessor = v;
+ pq.decrease(w, distance);
+ }
+ };
+
+ g.nodes().forEach(function (v) {
+ var distance = v === source ? 0 : Number.POSITIVE_INFINITY;
+ results[v] = { distance: distance };
+ pq.add(v, distance);
+ });
+
+ while (pq.size() > 0) {
+ v = pq.removeMin();
+ vEntry = results[v];
+ if (vEntry.distance === Number.POSITIVE_INFINITY) {
+ break;
+ }
+
+ edgeFn(v).forEach(updateNeighbors);
+ }
+
+ return results;
+}
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/dagre-d3-es@7.0.10/node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js
+
+
+
+
+
+function dijkstraAll(g, weightFunc, edgeFunc) {
+ return _.transform(
+ g.nodes(),
+ function (acc, v) {
+ acc[v] = dijkstra(g, v, weightFunc, edgeFunc);
+ },
+ {}
+ );
+}
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/dagre-d3-es@7.0.10/node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js
+
+
+
+
+var floyd_warshall_DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1);
+
+function floydWarshall(g, weightFn, edgeFn) {
+ return runFloydWarshall(
+ g,
+ weightFn || floyd_warshall_DEFAULT_WEIGHT_FUNC,
+ edgeFn ||
+ function (v) {
+ return g.outEdges(v);
+ }
+ );
+}
+
+function runFloydWarshall(g, weightFn, edgeFn) {
+ var results = {};
+ var nodes = g.nodes();
+
+ nodes.forEach(function (v) {
+ results[v] = {};
+ results[v][v] = { distance: 0 };
+ nodes.forEach(function (w) {
+ if (v !== w) {
+ results[v][w] = { distance: Number.POSITIVE_INFINITY };
+ }
+ });
+ edgeFn(v).forEach(function (edge) {
+ var w = edge.v === v ? edge.w : edge.v;
+ var d = weightFn(edge);
+ results[v][w] = { distance: d, predecessor: v };
+ });
+ });
+
+ nodes.forEach(function (k) {
+ var rowK = results[k];
+ nodes.forEach(function (i) {
+ var rowI = results[i];
+ nodes.forEach(function (j) {
+ var ik = rowI[k];
+ var kj = rowK[j];
+ var ij = rowI[j];
+ var altDistance = ik.distance + kj.distance;
+ if (altDistance < ij.distance) {
+ ij.distance = altDistance;
+ ij.predecessor = kj.predecessor;
+ }
+ });
+ });
+ });
+
+ return results;
+}
+
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseKeys.js + 1 modules
+var _baseKeys = __webpack_require__(88343);
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getTag.js + 3 modules
+var _getTag = __webpack_require__(23313);
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseGetTag.js + 2 modules
+var _baseGetTag = __webpack_require__(33918);
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isArray.js
+var isArray = __webpack_require__(56052);
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isObjectLike.js
+var isObjectLike = __webpack_require__(13795);
+;// CONCATENATED MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isString.js
+
+
+
+
+/** `Object#toString` result references. */
+var stringTag = '[object String]';
+
+/**
+ * Checks if `value` is classified as a `String` primitive or object.
+ *
+ * @static
+ * @since 0.1.0
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a string, else `false`.
+ * @example
+ *
+ * _.isString('abc');
+ * // => true
+ *
+ * _.isString(1);
+ * // => false
+ */
+function isString(value) {
+ return typeof value == 'string' ||
+ (!(0,isArray/* default */.Z)(value) && (0,isObjectLike/* default */.Z)(value) && (0,_baseGetTag/* default */.Z)(value) == stringTag);
+}
+
+/* harmony default export */ const lodash_es_isString = (isString);
+
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseProperty.js
+var _baseProperty = __webpack_require__(42361);
+;// CONCATENATED MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_asciiSize.js
+
+
+/**
+ * Gets the size of an ASCII `string`.
+ *
+ * @private
+ * @param {string} string The string inspect.
+ * @returns {number} Returns the string size.
+ */
+var asciiSize = (0,_baseProperty/* default */.Z)('length');
+
+/* harmony default export */ const _asciiSize = (asciiSize);
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hasUnicode.js
+/** Used to compose unicode character classes. */
+var rsAstralRange = '\\ud800-\\udfff',
+ rsComboMarksRange = '\\u0300-\\u036f',
+ reComboHalfMarksRange = '\\ufe20-\\ufe2f',
+ rsComboSymbolsRange = '\\u20d0-\\u20ff',
+ rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
+ rsVarRange = '\\ufe0e\\ufe0f';
+
+/** Used to compose unicode capture groups. */
+var rsZWJ = '\\u200d';
+
+/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */
+var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');
+
+/**
+ * Checks if `string` contains Unicode symbols.
+ *
+ * @private
+ * @param {string} string The string to inspect.
+ * @returns {boolean} Returns `true` if a symbol is found, else `false`.
+ */
+function hasUnicode(string) {
+ return reHasUnicode.test(string);
+}
+
+/* harmony default export */ const _hasUnicode = (hasUnicode);
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_unicodeSize.js
+/** Used to compose unicode character classes. */
+var _unicodeSize_rsAstralRange = '\\ud800-\\udfff',
+ _unicodeSize_rsComboMarksRange = '\\u0300-\\u036f',
+ _unicodeSize_reComboHalfMarksRange = '\\ufe20-\\ufe2f',
+ _unicodeSize_rsComboSymbolsRange = '\\u20d0-\\u20ff',
+ _unicodeSize_rsComboRange = _unicodeSize_rsComboMarksRange + _unicodeSize_reComboHalfMarksRange + _unicodeSize_rsComboSymbolsRange,
+ _unicodeSize_rsVarRange = '\\ufe0e\\ufe0f';
+
+/** Used to compose unicode capture groups. */
+var rsAstral = '[' + _unicodeSize_rsAstralRange + ']',
+ rsCombo = '[' + _unicodeSize_rsComboRange + ']',
+ rsFitz = '\\ud83c[\\udffb-\\udfff]',
+ rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
+ rsNonAstral = '[^' + _unicodeSize_rsAstralRange + ']',
+ rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}',
+ rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]',
+ _unicodeSize_rsZWJ = '\\u200d';
+
+/** Used to compose unicode regexes. */
+var reOptMod = rsModifier + '?',
+ rsOptVar = '[' + _unicodeSize_rsVarRange + ']?',
+ rsOptJoin = '(?:' + _unicodeSize_rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',
+ rsSeq = rsOptVar + reOptMod + rsOptJoin,
+ rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';
+
+/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */
+var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');
+
+/**
+ * Gets the size of a Unicode `string`.
+ *
+ * @private
+ * @param {string} string The string inspect.
+ * @returns {number} Returns the string size.
+ */
+function unicodeSize(string) {
+ var result = reUnicode.lastIndex = 0;
+ while (reUnicode.test(string)) {
+ ++result;
+ }
+ return result;
+}
+
+/* harmony default export */ const _unicodeSize = (unicodeSize);
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stringSize.js
+
+
+
+
+/**
+ * Gets the number of symbols in `string`.
+ *
+ * @private
+ * @param {string} string The string to inspect.
+ * @returns {number} Returns the string size.
+ */
+function stringSize(string) {
+ return _hasUnicode(string)
+ ? _unicodeSize(string)
+ : _asciiSize(string);
+}
+
+/* harmony default export */ const _stringSize = (stringSize);
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/size.js
+
+
+
+
+
+
+/** `Object#toString` result references. */
+var mapTag = '[object Map]',
+ setTag = '[object Set]';
+
+/**
+ * Gets the size of `collection` by returning its length for array-like
+ * values or the number of own enumerable string keyed properties for objects.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to inspect.
+ * @returns {number} Returns the collection size.
+ * @example
+ *
+ * _.size([1, 2, 3]);
+ * // => 3
+ *
+ * _.size({ 'a': 1, 'b': 2 });
+ * // => 2
+ *
+ * _.size('pebbles');
+ * // => 7
+ */
+function size(collection) {
+ if (collection == null) {
+ return 0;
+ }
+ if ((0,isArrayLike/* default */.Z)(collection)) {
+ return lodash_es_isString(collection) ? _stringSize(collection) : collection.length;
+ }
+ var tag = (0,_getTag/* default */.Z)(collection);
+ if (tag == mapTag || tag == setTag) {
+ return collection.size;
+ }
+ return (0,_baseKeys/* default */.Z)(collection).length;
+}
+
+/* harmony default export */ const lodash_es_size = (size);
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/dagre-d3-es@7.0.10/node_modules/dagre-d3-es/src/graphlib/alg/topsort.js
+
+
+
+
+topsort_topsort.CycleException = topsort_CycleException;
+
+function topsort_topsort(g) {
+ var visited = {};
+ var stack = {};
+ var results = [];
+
+ function visit(node) {
+ if (has/* default */.Z(stack, node)) {
+ throw new topsort_CycleException();
+ }
+
+ if (!has/* default */.Z(visited, node)) {
+ stack[node] = true;
+ visited[node] = true;
+ forEach/* default */.Z(g.predecessors(node), visit);
+ delete stack[node];
+ results.push(node);
+ }
+ }
+
+ forEach/* default */.Z(g.sinks(), visit);
+
+ if (lodash_es_size(visited) !== g.nodeCount()) {
+ throw new topsort_CycleException();
+ }
+
+ return results;
+}
+
+function topsort_CycleException() {}
+topsort_CycleException.prototype = new Error(); // must be an instance of Error to pass testing
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/dagre-d3-es@7.0.10/node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js
+
+
+
+
+function isAcyclic(g) {
+ try {
+ topsort(g);
+ } catch (e) {
+ if (e instanceof CycleException) {
+ return false;
+ }
+ throw e;
+ }
+ return true;
+}
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/dagre-d3-es@7.0.10/node_modules/dagre-d3-es/src/graphlib/alg/dfs.js
+
+
+
+
+/*
+ * A helper that preforms a pre- or post-order traversal on the input graph
+ * and returns the nodes in the order they were visited. If the graph is
+ * undirected then this algorithm will navigate using neighbors. If the graph
+ * is directed then this algorithm will navigate using successors.
+ *
+ * Order must be one of "pre" or "post".
+ */
+function dfs(g, vs, order) {
+ if (!isArray/* default */.Z(vs)) {
+ vs = [vs];
+ }
+
+ var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g);
+
+ var acc = [];
+ var visited = {};
+ forEach/* default */.Z(vs, function (v) {
+ if (!g.hasNode(v)) {
+ throw new Error('Graph does not have node: ' + v);
+ }
+
+ doDfs(g, v, order === 'post', visited, navigation, acc);
+ });
+ return acc;
+}
+
+function doDfs(g, v, postorder, visited, navigation, acc) {
+ if (!has/* default */.Z(visited, v)) {
+ visited[v] = true;
+
+ if (!postorder) {
+ acc.push(v);
+ }
+ forEach/* default */.Z(navigation(v), function (w) {
+ doDfs(g, w, postorder, visited, navigation, acc);
+ });
+ if (postorder) {
+ acc.push(v);
+ }
+ }
+}
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/dagre-d3-es@7.0.10/node_modules/dagre-d3-es/src/graphlib/alg/postorder.js
+
+
+
+
+function postorder(g, vs) {
+ return dfs(g, vs, 'post');
+}
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/dagre-d3-es@7.0.10/node_modules/dagre-d3-es/src/graphlib/alg/preorder.js
+
+
+
+
+function preorder(g, vs) {
+ return dfs(g, vs, 'pre');
+}
+
+// EXTERNAL MODULE: ./node_modules/.pnpm/dagre-d3-es@7.0.10/node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules
+var graph = __webpack_require__(65377);
+;// CONCATENATED MODULE: ./node_modules/.pnpm/dagre-d3-es@7.0.10/node_modules/dagre-d3-es/src/graphlib/alg/prim.js
+
+
+
+
+
+
+function prim(g, weightFunc) {
+ var result = new Graph();
+ var parents = {};
+ var pq = new PriorityQueue();
+ var v;
+
+ function updateNeighbors(edge) {
+ var w = edge.v === v ? edge.w : edge.v;
+ var pri = pq.priority(w);
+ if (pri !== undefined) {
+ var edgeWeight = weightFunc(edge);
+ if (edgeWeight < pri) {
+ parents[w] = v;
+ pq.decrease(w, edgeWeight);
+ }
+ }
+ }
+
+ if (g.nodeCount() === 0) {
+ return result;
+ }
+
+ _.each(g.nodes(), function (v) {
+ pq.add(v, Number.POSITIVE_INFINITY);
+ result.setNode(v);
+ });
+
+ // Start from an arbitrary node
+ pq.decrease(g.nodes()[0], 0);
+
+ var init = false;
+ while (pq.size() > 0) {
+ v = pq.removeMin();
+ if (_.has(parents, v)) {
+ result.setEdge(v, parents[v]);
+ } else if (init) {
+ throw new Error('Input graph is not connected: ' + g);
+ } else {
+ init = true;
+ }
+
+ g.nodeEdges(v).forEach(updateNeighbors);
+ }
+
+ return result;
+}
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/dagre-d3-es@7.0.10/node_modules/dagre-d3-es/src/graphlib/alg/index.js
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/dagre-d3-es@7.0.10/node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js
+
+
+
+
+
+
+
+
+// Expose some internals for testing purposes
+networkSimplex.initLowLimValues = initLowLimValues;
+networkSimplex.initCutValues = initCutValues;
+networkSimplex.calcCutValue = calcCutValue;
+networkSimplex.leaveEdge = leaveEdge;
+networkSimplex.enterEdge = enterEdge;
+networkSimplex.exchangeEdges = exchangeEdges;
+
+/*
+ * The network simplex algorithm assigns ranks to each node in the input graph
+ * and iteratively improves the ranking to reduce the length of edges.
+ *
+ * Preconditions:
+ *
+ * 1. The input graph must be a DAG.
+ * 2. All nodes in the graph must have an object value.
+ * 3. All edges in the graph must have "minlen" and "weight" attributes.
+ *
+ * Postconditions:
+ *
+ * 1. All nodes in the graph will have an assigned "rank" attribute that has
+ * been optimized by the network simplex algorithm. Ranks start at 0.
+ *
+ *
+ * A rough sketch of the algorithm is as follows:
+ *
+ * 1. Assign initial ranks to each node. We use the longest path algorithm,
+ * which assigns ranks to the lowest position possible. In general this
+ * leads to very wide bottom ranks and unnecessarily long edges.
+ * 2. Construct a feasible tight tree. A tight tree is one such that all
+ * edges in the tree have no slack (difference between length of edge
+ * and minlen for the edge). This by itself greatly improves the assigned
+ * rankings by shorting edges.
+ * 3. Iteratively find edges that have negative cut values. Generally a
+ * negative cut value indicates that the edge could be removed and a new
+ * tree edge could be added to produce a more compact graph.
+ *
+ * Much of the algorithms here are derived from Gansner, et al., "A Technique
+ * for Drawing Directed Graphs." The structure of the file roughly follows the
+ * structure of the overall algorithm.
+ */
+function networkSimplex(g) {
+ g = simplify(g);
+ longestPath(g);
+ var t = feasibleTree(g);
+ initLowLimValues(t);
+ initCutValues(t, g);
+
+ var e, f;
+ while ((e = leaveEdge(t))) {
+ f = enterEdge(t, g, e);
+ exchangeEdges(t, g, e, f);
+ }
+}
+
+/*
+ * Initializes cut values for all edges in the tree.
+ */
+function initCutValues(t, g) {
+ var vs = postorder(t, t.nodes());
+ vs = vs.slice(0, vs.length - 1);
+ forEach/* default */.Z(vs, function (v) {
+ assignCutValue(t, g, v);
+ });
+}
+
+function assignCutValue(t, g, child) {
+ var childLab = t.node(child);
+ var parent = childLab.parent;
+ t.edge(child, parent).cutvalue = calcCutValue(t, g, child);
+}
+
+/*
+ * Given the tight tree, its graph, and a child in the graph calculate and
+ * return the cut value for the edge between the child and its parent.
+ */
+function calcCutValue(t, g, child) {
+ var childLab = t.node(child);
+ var parent = childLab.parent;
+ // True if the child is on the tail end of the edge in the directed graph
+ var childIsTail = true;
+ // The graph's view of the tree edge we're inspecting
+ var graphEdge = g.edge(child, parent);
+ // The accumulated cut value for the edge between this node and its parent
+ var cutValue = 0;
+
+ if (!graphEdge) {
+ childIsTail = false;
+ graphEdge = g.edge(parent, child);
+ }
+
+ cutValue = graphEdge.weight;
+
+ forEach/* default */.Z(g.nodeEdges(child), function (e) {
+ var isOutEdge = e.v === child,
+ other = isOutEdge ? e.w : e.v;
+
+ if (other !== parent) {
+ var pointsToHead = isOutEdge === childIsTail,
+ otherWeight = g.edge(e).weight;
+
+ cutValue += pointsToHead ? otherWeight : -otherWeight;
+ if (isTreeEdge(t, child, other)) {
+ var otherCutValue = t.edge(child, other).cutvalue;
+ cutValue += pointsToHead ? -otherCutValue : otherCutValue;
+ }
+ }
+ });
+
+ return cutValue;
+}
+
+function initLowLimValues(tree, root) {
+ if (arguments.length < 2) {
+ root = tree.nodes()[0];
+ }
+ dfsAssignLowLim(tree, {}, 1, root);
+}
+
+function dfsAssignLowLim(tree, visited, nextLim, v, parent) {
+ var low = nextLim;
+ var label = tree.node(v);
+
+ visited[v] = true;
+ forEach/* default */.Z(tree.neighbors(v), function (w) {
+ if (!has/* default */.Z(visited, w)) {
+ nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v);
+ }
+ });
+
+ label.low = low;
+ label.lim = nextLim++;
+ if (parent) {
+ label.parent = parent;
+ } else {
+ // TODO should be able to remove this when we incrementally update low lim
+ delete label.parent;
+ }
+
+ return nextLim;
+}
+
+function leaveEdge(tree) {
+ return lodash_es_find(tree.edges(), function (e) {
+ return tree.edge(e).cutvalue < 0;
+ });
+}
+
+function enterEdge(t, g, edge) {
+ var v = edge.v;
+ var w = edge.w;
+
+ // For the rest of this function we assume that v is the tail and w is the
+ // head, so if we don't have this edge in the graph we should flip it to
+ // match the correct orientation.
+ if (!g.hasEdge(v, w)) {
+ v = edge.w;
+ w = edge.v;
+ }
+
+ var vLabel = t.node(v);
+ var wLabel = t.node(w);
+ var tailLabel = vLabel;
+ var flip = false;
+
+ // If the root is in the tail of the edge then we need to flip the logic that
+ // checks for the head and tail nodes in the candidates function below.
+ if (vLabel.lim > wLabel.lim) {
+ tailLabel = wLabel;
+ flip = true;
+ }
+
+ var candidates = filter/* default */.Z(g.edges(), function (edge) {
+ return (
+ flip === isDescendant(t, t.node(edge.v), tailLabel) &&
+ flip !== isDescendant(t, t.node(edge.w), tailLabel)
+ );
+ });
+
+ return lodash_es_minBy(candidates, function (edge) {
+ return slack(g, edge);
+ });
+}
+
+function exchangeEdges(t, g, e, f) {
+ var v = e.v;
+ var w = e.w;
+ t.removeEdge(v, w);
+ t.setEdge(f.v, f.w, {});
+ initLowLimValues(t);
+ initCutValues(t, g);
+ updateRanks(t, g);
+}
+
+function updateRanks(t, g) {
+ var root = lodash_es_find(t.nodes(), function (v) {
+ return !g.node(v).parent;
+ });
+ var vs = preorder(t, root);
+ vs = vs.slice(1);
+ forEach/* default */.Z(vs, function (v) {
+ var parent = t.node(v).parent,
+ edge = g.edge(v, parent),
+ flipped = false;
+
+ if (!edge) {
+ edge = g.edge(parent, v);
+ flipped = true;
+ }
+
+ g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen);
+ });
+}
+
+/*
+ * Returns true if the edge is in the tree.
+ */
+function isTreeEdge(tree, u, v) {
+ return tree.hasEdge(u, v);
+}
+
+/*
+ * Returns true if the specified node is descendant of the root node per the
+ * assigned low and lim attributes in the tree.
+ */
+function isDescendant(tree, vLabel, rootLabel) {
+ return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim;
+}
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/dagre-d3-es@7.0.10/node_modules/dagre-d3-es/src/dagre/rank/index.js
+
+
+
+
+
+
+/*
+ * Assigns a rank to each node in the input graph that respects the "minlen"
+ * constraint specified on edges between nodes.
+ *
+ * This basic structure is derived from Gansner, et al., "A Technique for
+ * Drawing Directed Graphs."
+ *
+ * Pre-conditions:
+ *
+ * 1. Graph must be a connected DAG
+ * 2. Graph nodes must be objects
+ * 3. Graph edges must have "weight" and "minlen" attributes
+ *
+ * Post-conditions:
+ *
+ * 1. Graph nodes will have a "rank" attribute based on the results of the
+ * algorithm. Ranks can start at any index (including negative), we'll
+ * fix them up later.
+ */
+function rank(g) {
+ switch (g.graph().ranker) {
+ case 'network-simplex':
+ networkSimplexRanker(g);
+ break;
+ case 'tight-tree':
+ tightTreeRanker(g);
+ break;
+ case 'longest-path':
+ longestPathRanker(g);
+ break;
+ default:
+ networkSimplexRanker(g);
+ }
+}
+
+// A fast and simple ranker, but results are far from optimal.
+var longestPathRanker = longestPath;
+
+function tightTreeRanker(g) {
+ longestPath(g);
+ feasibleTree(g);
+}
+
+function networkSimplexRanker(g) {
+ networkSimplex(g);
+}
+
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/values.js + 1 modules
+var values = __webpack_require__(27942);
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/reduce.js + 2 modules
+var reduce = __webpack_require__(43329);
+;// CONCATENATED MODULE: ./node_modules/.pnpm/dagre-d3-es@7.0.10/node_modules/dagre-d3-es/src/dagre/nesting-graph.js
+
+
+
+
+
+/*
+ * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs,
+ * adds appropriate edges to ensure that all cluster nodes are placed between
+ * these boundries, and ensures that the graph is connected.
+ *
+ * In addition we ensure, through the use of the minlen property, that nodes
+ * and subgraph border nodes to not end up on the same rank.
+ *
+ * Preconditions:
+ *
+ * 1. Input graph is a DAG
+ * 2. Nodes in the input graph has a minlen attribute
+ *
+ * Postconditions:
+ *
+ * 1. Input graph is connected.
+ * 2. Dummy nodes are added for the tops and bottoms of subgraphs.
+ * 3. The minlen attribute for nodes is adjusted to ensure nodes do not
+ * get placed on the same rank as subgraph border nodes.
+ *
+ * The nesting graph idea comes from Sander, "Layout of Compound Directed
+ * Graphs."
+ */
+function nesting_graph_run(g) {
+ var root = addDummyNode(g, 'root', {}, '_root');
+ var depths = treeDepths(g);
+ var height = lodash_es_max(values/* default */.Z(depths)) - 1; // Note: depths is an Object not an array
+ var nodeSep = 2 * height + 1;
+
+ g.graph().nestingRoot = root;
+
+ // Multiply minlen by nodeSep to align nodes on non-border ranks.
+ forEach/* default */.Z(g.edges(), function (e) {
+ g.edge(e).minlen *= nodeSep;
+ });
+
+ // Calculate a weight that is sufficient to keep subgraphs vertically compact
+ var weight = sumWeights(g) + 1;
+
+ // Create border nodes and link them up
+ forEach/* default */.Z(g.children(), function (child) {
+ nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child);
+ });
+
+ // Save the multiplier for node layers for later removal of empty border
+ // layers.
+ g.graph().nodeRankFactor = nodeSep;
+}
+
+function nesting_graph_dfs(g, root, nodeSep, weight, height, depths, v) {
+ var children = g.children(v);
+ if (!children.length) {
+ if (v !== root) {
+ g.setEdge(root, v, { weight: 0, minlen: nodeSep });
+ }
+ return;
+ }
+
+ var top = addBorderNode(g, '_bt');
+ var bottom = addBorderNode(g, '_bb');
+ var label = g.node(v);
+
+ g.setParent(top, v);
+ label.borderTop = top;
+ g.setParent(bottom, v);
+ label.borderBottom = bottom;
+
+ forEach/* default */.Z(children, function (child) {
+ nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child);
+
+ var childNode = g.node(child);
+ var childTop = childNode.borderTop ? childNode.borderTop : child;
+ var childBottom = childNode.borderBottom ? childNode.borderBottom : child;
+ var thisWeight = childNode.borderTop ? weight : 2 * weight;
+ var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1;
+
+ g.setEdge(top, childTop, {
+ weight: thisWeight,
+ minlen: minlen,
+ nestingEdge: true,
+ });
+
+ g.setEdge(childBottom, bottom, {
+ weight: thisWeight,
+ minlen: minlen,
+ nestingEdge: true,
+ });
+ });
+
+ if (!g.parent(v)) {
+ g.setEdge(root, top, { weight: 0, minlen: height + depths[v] });
+ }
+}
+
+function treeDepths(g) {
+ var depths = {};
+ function dfs(v, depth) {
+ var children = g.children(v);
+ if (children && children.length) {
+ forEach/* default */.Z(children, function (child) {
+ dfs(child, depth + 1);
+ });
+ }
+ depths[v] = depth;
+ }
+ forEach/* default */.Z(g.children(), function (v) {
+ dfs(v, 1);
+ });
+ return depths;
+}
+
+function sumWeights(g) {
+ return reduce/* default */.Z(
+ g.edges(),
+ function (acc, e) {
+ return acc + g.edge(e).weight;
+ },
+ 0
+ );
+}
+
+function cleanup(g) {
+ var graphLabel = g.graph();
+ g.removeNode(graphLabel.nestingRoot);
+ delete graphLabel.nestingRoot;
+ forEach/* default */.Z(g.edges(), function (e) {
+ var edge = g.edge(e);
+ if (edge.nestingEdge) {
+ g.removeEdge(e);
+ }
+ });
+}
+
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseClone.js + 15 modules
+var _baseClone = __webpack_require__(85811);
+;// CONCATENATED MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/cloneDeep.js
+
+
+/** Used to compose bitmasks for cloning. */
+var CLONE_DEEP_FLAG = 1,
+ CLONE_SYMBOLS_FLAG = 4;
+
+/**
+ * This method is like `_.clone` except that it recursively clones `value`.
+ *
+ * @static
+ * @memberOf _
+ * @since 1.0.0
+ * @category Lang
+ * @param {*} value The value to recursively clone.
+ * @returns {*} Returns the deep cloned value.
+ * @see _.clone
+ * @example
+ *
+ * var objects = [{ 'a': 1 }, { 'b': 2 }];
+ *
+ * var deep = _.cloneDeep(objects);
+ * console.log(deep[0] === objects[0]);
+ * // => false
+ */
+function cloneDeep(value) {
+ return (0,_baseClone/* default */.Z)(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);
+}
+
+/* harmony default export */ const lodash_es_cloneDeep = (cloneDeep);
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/dagre-d3-es@7.0.10/node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js
+
+
+
+
+function addSubgraphConstraints(g, cg, vs) {
+ var prev = {},
+ rootPrev;
+
+ forEach/* default */.Z(vs, function (v) {
+ var child = g.parent(v),
+ parent,
+ prevChild;
+ while (child) {
+ parent = g.parent(child);
+ if (parent) {
+ prevChild = prev[parent];
+ prev[parent] = child;
+ } else {
+ prevChild = rootPrev;
+ rootPrev = child;
+ }
+ if (prevChild && prevChild !== child) {
+ cg.setEdge(prevChild, child);
+ return;
+ }
+ child = parent;
+ }
+ });
+
+ /*
+ function dfs(v) {
+ var children = v ? g.children(v) : g.children();
+ if (children.length) {
+ var min = Number.POSITIVE_INFINITY,
+ subgraphs = [];
+ _.each(children, function(child) {
+ var childMin = dfs(child);
+ if (g.children(child).length) {
+ subgraphs.push({ v: child, order: childMin });
+ }
+ min = Math.min(min, childMin);
+ });
+ _.reduce(_.sortBy(subgraphs, "order"), function(prev, curr) {
+ cg.setEdge(prev.v, curr.v);
+ return curr;
+ });
+ return min;
+ }
+ return g.node(v).order;
+ }
+ dfs(undefined);
+ */
+}
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/dagre-d3-es@7.0.10/node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js
+
+
+
+
+
+/*
+ * Constructs a graph that can be used to sort a layer of nodes. The graph will
+ * contain all base and subgraph nodes from the request layer in their original
+ * hierarchy and any edges that are incident on these nodes and are of the type
+ * requested by the "relationship" parameter.
+ *
+ * Nodes from the requested rank that do not have parents are assigned a root
+ * node in the output graph, which is set in the root graph attribute. This
+ * makes it easy to walk the hierarchy of movable nodes during ordering.
+ *
+ * Pre-conditions:
+ *
+ * 1. Input graph is a DAG
+ * 2. Base nodes in the input graph have a rank attribute
+ * 3. Subgraph nodes in the input graph has minRank and maxRank attributes
+ * 4. Edges have an assigned weight
+ *
+ * Post-conditions:
+ *
+ * 1. Output graph has all nodes in the movable rank with preserved
+ * hierarchy.
+ * 2. Root nodes in the movable layer are made children of the node
+ * indicated by the root attribute of the graph.
+ * 3. Non-movable nodes incident on movable nodes, selected by the
+ * relationship parameter, are included in the graph (without hierarchy).
+ * 4. Edges incident on movable nodes, selected by the relationship
+ * parameter, are added to the output graph.
+ * 5. The weights for copied edges are aggregated as need, since the output
+ * graph is not a multi-graph.
+ */
+function buildLayerGraph(g, rank, relationship) {
+ var root = createRootNode(g),
+ result = new graphlib/* Graph */.k({ compound: true })
+ .setGraph({ root: root })
+ .setDefaultNodeLabel(function (v) {
+ return g.node(v);
+ });
+
+ forEach/* default */.Z(g.nodes(), function (v) {
+ var node = g.node(v),
+ parent = g.parent(v);
+
+ if (node.rank === rank || (node.minRank <= rank && rank <= node.maxRank)) {
+ result.setNode(v);
+ result.setParent(v, parent || root);
+
+ // This assumes we have only short edges!
+ forEach/* default */.Z(g[relationship](v), function (e) {
+ var u = e.v === v ? e.w : e.v,
+ edge = result.edge(u, v),
+ weight = !isUndefined/* default */.Z(edge) ? edge.weight : 0;
+ result.setEdge(u, v, { weight: g.edge(e).weight + weight });
+ });
+
+ if (has/* default */.Z(node, 'minRank')) {
+ result.setNode(v, {
+ borderLeft: node.borderLeft[rank],
+ borderRight: node.borderRight[rank],
+ });
+ }
+ }
+ });
+
+ return result;
+}
+
+function createRootNode(g) {
+ var v;
+ while (g.hasNode((v = uniqueId/* default */.Z('_root'))));
+ return v;
+}
+
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_assignValue.js
+var _assignValue = __webpack_require__(61572);
+;// CONCATENATED MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseZipObject.js
+/**
+ * This base implementation of `_.zipObject` which assigns values using `assignFunc`.
+ *
+ * @private
+ * @param {Array} props The property identifiers.
+ * @param {Array} values The property values.
+ * @param {Function} assignFunc The function to assign values.
+ * @returns {Object} Returns the new object.
+ */
+function baseZipObject(props, values, assignFunc) {
+ var index = -1,
+ length = props.length,
+ valsLength = values.length,
+ result = {};
+
+ while (++index < length) {
+ var value = index < valsLength ? values[index] : undefined;
+ assignFunc(result, props[index], value);
+ }
+ return result;
+}
+
+/* harmony default export */ const _baseZipObject = (baseZipObject);
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/zipObject.js
+
+
+
+/**
+ * This method is like `_.fromPairs` except that it accepts two arrays,
+ * one of property identifiers and one of corresponding values.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.4.0
+ * @category Array
+ * @param {Array} [props=[]] The property identifiers.
+ * @param {Array} [values=[]] The property values.
+ * @returns {Object} Returns the new object.
+ * @example
+ *
+ * _.zipObject(['a', 'b'], [1, 2]);
+ * // => { 'a': 1, 'b': 2 }
+ */
+function zipObject(props, values) {
+ return _baseZipObject(props || [], values || [], _assignValue/* default */.Z);
+}
+
+/* harmony default export */ const lodash_es_zipObject = (zipObject);
+
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseFlatten.js + 1 modules
+var _baseFlatten = __webpack_require__(84887);
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayMap.js
+var _arrayMap = __webpack_require__(28019);
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseGet.js
+var _baseGet = __webpack_require__(49084);
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseMap.js
+var _baseMap = __webpack_require__(51135);
+;// CONCATENATED MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseSortBy.js
+/**
+ * The base implementation of `_.sortBy` which uses `comparer` to define the
+ * sort order of `array` and replaces criteria objects with their corresponding
+ * values.
+ *
+ * @private
+ * @param {Array} array The array to sort.
+ * @param {Function} comparer The function to define sort order.
+ * @returns {Array} Returns `array`.
+ */
+function baseSortBy(array, comparer) {
+ var length = array.length;
+
+ array.sort(comparer);
+ while (length--) {
+ array[length] = array[length].value;
+ }
+ return array;
+}
+
+/* harmony default export */ const _baseSortBy = (baseSortBy);
+
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseUnary.js
+var _baseUnary = __webpack_require__(5467);
+;// CONCATENATED MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_compareAscending.js
+
+
+/**
+ * Compares values to sort them in ascending order.
+ *
+ * @private
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {number} Returns the sort order indicator for `value`.
+ */
+function compareAscending(value, other) {
+ if (value !== other) {
+ var valIsDefined = value !== undefined,
+ valIsNull = value === null,
+ valIsReflexive = value === value,
+ valIsSymbol = (0,isSymbol/* default */.Z)(value);
+
+ var othIsDefined = other !== undefined,
+ othIsNull = other === null,
+ othIsReflexive = other === other,
+ othIsSymbol = (0,isSymbol/* default */.Z)(other);
+
+ if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||
+ (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||
+ (valIsNull && othIsDefined && othIsReflexive) ||
+ (!valIsDefined && othIsReflexive) ||
+ !valIsReflexive) {
+ return 1;
+ }
+ if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||
+ (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||
+ (othIsNull && valIsDefined && valIsReflexive) ||
+ (!othIsDefined && valIsReflexive) ||
+ !othIsReflexive) {
+ return -1;
+ }
+ }
+ return 0;
+}
+
+/* harmony default export */ const _compareAscending = (compareAscending);
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_compareMultiple.js
+
+
+/**
+ * Used by `_.orderBy` to compare multiple properties of a value to another
+ * and stable sort them.
+ *
+ * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,
+ * specify an order of "desc" for descending or "asc" for ascending sort order
+ * of corresponding values.
+ *
+ * @private
+ * @param {Object} object The object to compare.
+ * @param {Object} other The other object to compare.
+ * @param {boolean[]|string[]} orders The order to sort by for each property.
+ * @returns {number} Returns the sort order indicator for `object`.
+ */
+function compareMultiple(object, other, orders) {
+ var index = -1,
+ objCriteria = object.criteria,
+ othCriteria = other.criteria,
+ length = objCriteria.length,
+ ordersLength = orders.length;
+
+ while (++index < length) {
+ var result = _compareAscending(objCriteria[index], othCriteria[index]);
+ if (result) {
+ if (index >= ordersLength) {
+ return result;
+ }
+ var order = orders[index];
+ return result * (order == 'desc' ? -1 : 1);
+ }
+ }
+ // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications
+ // that causes it, under certain circumstances, to provide the same value for
+ // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247
+ // for more details.
+ //
+ // This also ensures a stable sort in V8 and other engines.
+ // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.
+ return object.index - other.index;
+}
+
+/* harmony default export */ const _compareMultiple = (compareMultiple);
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseOrderBy.js
+
+
+
+
+
+
+
+
+
+
+/**
+ * The base implementation of `_.orderBy` without param guards.
+ *
+ * @private
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.
+ * @param {string[]} orders The sort orders of `iteratees`.
+ * @returns {Array} Returns the new sorted array.
+ */
+function baseOrderBy(collection, iteratees, orders) {
+ if (iteratees.length) {
+ iteratees = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) {
+ if ((0,isArray/* default */.Z)(iteratee)) {
+ return function(value) {
+ return (0,_baseGet/* default */.Z)(value, iteratee.length === 1 ? iteratee[0] : iteratee);
+ }
+ }
+ return iteratee;
+ });
+ } else {
+ iteratees = [identity/* default */.Z];
+ }
+
+ var index = -1;
+ iteratees = (0,_arrayMap/* default */.Z)(iteratees, (0,_baseUnary/* default */.Z)(_baseIteratee/* default */.Z));
+
+ var result = (0,_baseMap/* default */.Z)(collection, function(value, key, collection) {
+ var criteria = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) {
+ return iteratee(value);
+ });
+ return { 'criteria': criteria, 'index': ++index, 'value': value };
+ });
+
+ return _baseSortBy(result, function(object, other) {
+ return _compareMultiple(object, other, orders);
+ });
+}
+
+/* harmony default export */ const _baseOrderBy = (baseOrderBy);
+
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseRest.js
+var _baseRest = __webpack_require__(19851);
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isIterateeCall.js
+var _isIterateeCall = __webpack_require__(61833);
+;// CONCATENATED MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/sortBy.js
+
+
+
+
+
+/**
+ * Creates an array of elements, sorted in ascending order by the results of
+ * running each element in a collection thru each iteratee. This method
+ * performs a stable sort, that is, it preserves the original sort order of
+ * equal elements. The iteratees are invoked with one argument: (value).
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {...(Function|Function[])} [iteratees=[_.identity]]
+ * The iteratees to sort by.
+ * @returns {Array} Returns the new sorted array.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'fred', 'age': 48 },
+ * { 'user': 'barney', 'age': 36 },
+ * { 'user': 'fred', 'age': 30 },
+ * { 'user': 'barney', 'age': 34 }
+ * ];
+ *
+ * _.sortBy(users, [function(o) { return o.user; }]);
+ * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]
+ *
+ * _.sortBy(users, ['user', 'age']);
+ * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]
+ */
+var sortBy = (0,_baseRest/* default */.Z)(function(collection, iteratees) {
+ if (collection == null) {
+ return [];
+ }
+ var length = iteratees.length;
+ if (length > 1 && (0,_isIterateeCall/* default */.Z)(collection, iteratees[0], iteratees[1])) {
+ iteratees = [];
+ } else if (length > 2 && (0,_isIterateeCall/* default */.Z)(iteratees[0], iteratees[1], iteratees[2])) {
+ iteratees = [iteratees[0]];
+ }
+ return _baseOrderBy(collection, (0,_baseFlatten/* default */.Z)(iteratees, 1), []);
+});
+
+/* harmony default export */ const lodash_es_sortBy = (sortBy);
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/dagre-d3-es@7.0.10/node_modules/dagre-d3-es/src/dagre/order/cross-count.js
+
+
+
+
+/*
+ * A function that takes a layering (an array of layers, each with an array of
+ * ordererd nodes) and a graph and returns a weighted crossing count.
+ *
+ * Pre-conditions:
+ *
+ * 1. Input graph must be simple (not a multigraph), directed, and include
+ * only simple edges.
+ * 2. Edges in the input graph must have assigned weights.
+ *
+ * Post-conditions:
+ *
+ * 1. The graph and layering matrix are left unchanged.
+ *
+ * This algorithm is derived from Barth, et al., "Bilayer Cross Counting."
+ */
+function crossCount(g, layering) {
+ var cc = 0;
+ for (var i = 1; i < layering.length; ++i) {
+ cc += twoLayerCrossCount(g, layering[i - 1], layering[i]);
+ }
+ return cc;
+}
+
+function twoLayerCrossCount(g, northLayer, southLayer) {
+ // Sort all of the edges between the north and south layers by their position
+ // in the north layer and then the south. Map these edges to the position of
+ // their head in the south layer.
+ var southPos = lodash_es_zipObject(
+ southLayer,
+ map/* default */.Z(southLayer, function (v, i) {
+ return i;
+ })
+ );
+ var southEntries = flatten/* default */.Z(
+ map/* default */.Z(northLayer, function (v) {
+ return lodash_es_sortBy(
+ map/* default */.Z(g.outEdges(v), function (e) {
+ return { pos: southPos[e.w], weight: g.edge(e).weight };
+ }),
+ 'pos'
+ );
+ })
+ );
+
+ // Build the accumulator tree
+ var firstIndex = 1;
+ while (firstIndex < southLayer.length) firstIndex <<= 1;
+ var treeSize = 2 * firstIndex - 1;
+ firstIndex -= 1;
+ var tree = map/* default */.Z(new Array(treeSize), function () {
+ return 0;
+ });
+
+ // Calculate the weighted crossings
+ var cc = 0;
+ forEach/* default */.Z(
+ // @ts-expect-error
+ southEntries.forEach(function (entry) {
+ var index = entry.pos + firstIndex;
+ tree[index] += entry.weight;
+ var weightSum = 0;
+ // @ts-expect-error
+ while (index > 0) {
+ // @ts-expect-error
+ if (index % 2) {
+ weightSum += tree[index + 1];
+ }
+ // @ts-expect-error
+ index = (index - 1) >> 1;
+ tree[index] += entry.weight;
+ }
+ cc += entry.weight * weightSum;
+ })
+ );
+
+ return cc;
+}
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/dagre-d3-es@7.0.10/node_modules/dagre-d3-es/src/dagre/order/init-order.js
+
+
+
+
+/*
+ * Assigns an initial order value for each node by performing a DFS search
+ * starting from nodes in the first rank. Nodes are assigned an order in their
+ * rank as they are first visited.
+ *
+ * This approach comes from Gansner, et al., "A Technique for Drawing Directed
+ * Graphs."
+ *
+ * Returns a layering matrix with an array per layer and each layer sorted by
+ * the order of its nodes.
+ */
+function initOrder(g) {
+ var visited = {};
+ var simpleNodes = filter/* default */.Z(g.nodes(), function (v) {
+ return !g.children(v).length;
+ });
+ var maxRank = lodash_es_max(
+ map/* default */.Z(simpleNodes, function (v) {
+ return g.node(v).rank;
+ })
+ );
+ var layers = map/* default */.Z(range/* default */.Z(maxRank + 1), function () {
+ return [];
+ });
+
+ function dfs(v) {
+ if (has/* default */.Z(visited, v)) return;
+ visited[v] = true;
+ var node = g.node(v);
+ layers[node.rank].push(v);
+ forEach/* default */.Z(g.successors(v), dfs);
+ }
+
+ var orderedVs = lodash_es_sortBy(simpleNodes, function (v) {
+ return g.node(v).rank;
+ });
+ forEach/* default */.Z(orderedVs, dfs);
+
+ return layers;
+}
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/dagre-d3-es@7.0.10/node_modules/dagre-d3-es/src/dagre/order/barycenter.js
+
+
+
+
+function barycenter(g, movable) {
+ return map/* default */.Z(movable, function (v) {
+ var inV = g.inEdges(v);
+ if (!inV.length) {
+ return { v: v };
+ } else {
+ var result = reduce/* default */.Z(
+ inV,
+ function (acc, e) {
+ var edge = g.edge(e),
+ nodeU = g.node(e.v);
+ return {
+ sum: acc.sum + edge.weight * nodeU.order,
+ weight: acc.weight + edge.weight,
+ };
+ },
+ { sum: 0, weight: 0 }
+ );
+
+ return {
+ v: v,
+ barycenter: result.sum / result.weight,
+ weight: result.weight,
+ };
+ }
+ });
+}
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/dagre-d3-es@7.0.10/node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js
+
+
+
+
+/*
+ * Given a list of entries of the form {v, barycenter, weight} and a
+ * constraint graph this function will resolve any conflicts between the
+ * constraint graph and the barycenters for the entries. If the barycenters for
+ * an entry would violate a constraint in the constraint graph then we coalesce
+ * the nodes in the conflict into a new node that respects the contraint and
+ * aggregates barycenter and weight information.
+ *
+ * This implementation is based on the description in Forster, "A Fast and
+ * Simple Hueristic for Constrained Two-Level Crossing Reduction," thought it
+ * differs in some specific details.
+ *
+ * Pre-conditions:
+ *
+ * 1. Each entry has the form {v, barycenter, weight}, or if the node has
+ * no barycenter, then {v}.
+ *
+ * Returns:
+ *
+ * A new list of entries of the form {vs, i, barycenter, weight}. The list
+ * `vs` may either be a singleton or it may be an aggregation of nodes
+ * ordered such that they do not violate constraints from the constraint
+ * graph. The property `i` is the lowest original index of any of the
+ * elements in `vs`.
+ */
+function resolveConflicts(entries, cg) {
+ var mappedEntries = {};
+ forEach/* default */.Z(entries, function (entry, i) {
+ var tmp = (mappedEntries[entry.v] = {
+ indegree: 0,
+ in: [],
+ out: [],
+ vs: [entry.v],
+ i: i,
+ });
+ if (!isUndefined/* default */.Z(entry.barycenter)) {
+ // @ts-expect-error
+ tmp.barycenter = entry.barycenter;
+ // @ts-expect-error
+ tmp.weight = entry.weight;
+ }
+ });
+
+ forEach/* default */.Z(cg.edges(), function (e) {
+ var entryV = mappedEntries[e.v];
+ var entryW = mappedEntries[e.w];
+ if (!isUndefined/* default */.Z(entryV) && !isUndefined/* default */.Z(entryW)) {
+ entryW.indegree++;
+ entryV.out.push(mappedEntries[e.w]);
+ }
+ });
+
+ var sourceSet = filter/* default */.Z(mappedEntries, function (entry) {
+ // @ts-expect-error
+ return !entry.indegree;
+ });
+
+ return doResolveConflicts(sourceSet);
+}
+
+function doResolveConflicts(sourceSet) {
+ var entries = [];
+
+ function handleIn(vEntry) {
+ return function (uEntry) {
+ if (uEntry.merged) {
+ return;
+ }
+ if (
+ isUndefined/* default */.Z(uEntry.barycenter) ||
+ isUndefined/* default */.Z(vEntry.barycenter) ||
+ uEntry.barycenter >= vEntry.barycenter
+ ) {
+ mergeEntries(vEntry, uEntry);
+ }
+ };
+ }
+
+ function handleOut(vEntry) {
+ return function (wEntry) {
+ wEntry['in'].push(vEntry);
+ if (--wEntry.indegree === 0) {
+ sourceSet.push(wEntry);
+ }
+ };
+ }
+
+ while (sourceSet.length) {
+ var entry = sourceSet.pop();
+ entries.push(entry);
+ forEach/* default */.Z(entry['in'].reverse(), handleIn(entry));
+ forEach/* default */.Z(entry.out, handleOut(entry));
+ }
+
+ return map/* default */.Z(
+ filter/* default */.Z(entries, function (entry) {
+ return !entry.merged;
+ }),
+ function (entry) {
+ return pick/* default */.Z(entry, ['vs', 'i', 'barycenter', 'weight']);
+ }
+ );
+}
+
+function mergeEntries(target, source) {
+ var sum = 0;
+ var weight = 0;
+
+ if (target.weight) {
+ sum += target.barycenter * target.weight;
+ weight += target.weight;
+ }
+
+ if (source.weight) {
+ sum += source.barycenter * source.weight;
+ weight += source.weight;
+ }
+
+ target.vs = source.vs.concat(target.vs);
+ target.barycenter = sum / weight;
+ target.weight = weight;
+ target.i = Math.min(source.i, target.i);
+ source.merged = true;
+}
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/dagre-d3-es@7.0.10/node_modules/dagre-d3-es/src/dagre/order/sort.js
+
+
+
+
+
+function sort(entries, biasRight) {
+ var parts = partition(entries, function (entry) {
+ return has/* default */.Z(entry, 'barycenter');
+ });
+ var sortable = parts.lhs,
+ unsortable = lodash_es_sortBy(parts.rhs, function (entry) {
+ return -entry.i;
+ }),
+ vs = [],
+ sum = 0,
+ weight = 0,
+ vsIndex = 0;
+
+ sortable.sort(compareWithBias(!!biasRight));
+
+ vsIndex = consumeUnsortable(vs, unsortable, vsIndex);
+
+ forEach/* default */.Z(sortable, function (entry) {
+ vsIndex += entry.vs.length;
+ vs.push(entry.vs);
+ sum += entry.barycenter * entry.weight;
+ weight += entry.weight;
+ vsIndex = consumeUnsortable(vs, unsortable, vsIndex);
+ });
+
+ var result = { vs: flatten/* default */.Z(vs) };
+ if (weight) {
+ result.barycenter = sum / weight;
+ result.weight = weight;
+ }
+ return result;
+}
+
+function consumeUnsortable(vs, unsortable, index) {
+ var last;
+ while (unsortable.length && (last = lodash_es_last(unsortable)).i <= index) {
+ unsortable.pop();
+ vs.push(last.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;
+ };
+}
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/dagre-d3-es@7.0.10/node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js
+
+
+
+
+
+
+
+function sortSubgraph(g, v, cg, biasRight) {
+ var movable = g.children(v);
+ var node = g.node(v);
+ var bl = node ? node.borderLeft : undefined;
+ var br = node ? node.borderRight : undefined;
+ var subgraphs = {};
+
+ if (bl) {
+ movable = filter/* default */.Z(movable, function (w) {
+ return w !== bl && w !== br;
+ });
+ }
+
+ var barycenters = barycenter(g, movable);
+ forEach/* default */.Z(barycenters, function (entry) {
+ if (g.children(entry.v).length) {
+ var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight);
+ subgraphs[entry.v] = subgraphResult;
+ if (has/* default */.Z(subgraphResult, 'barycenter')) {
+ mergeBarycenters(entry, subgraphResult);
+ }
+ }
+ });
+
+ var entries = resolveConflicts(barycenters, cg);
+ expandSubgraphs(entries, subgraphs);
+
+ var result = sort(entries, biasRight);
+
+ if (bl) {
+ result.vs = flatten/* default */.Z([bl, result.vs, br]);
+ if (g.predecessors(bl).length) {
+ var blPred = g.node(g.predecessors(bl)[0]),
+ brPred = g.node(g.predecessors(br)[0]);
+ if (!has/* default */.Z(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 */.Z(entries, function (entry) {
+ entry.vs = flatten/* default */.Z(
+ entry.vs.map(function (v) {
+ if (subgraphs[v]) {
+ return subgraphs[v].vs;
+ }
+ return v;
+ })
+ );
+ });
+}
+
+function mergeBarycenters(target, other) {
+ if (!isUndefined/* default */.Z(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;
+ }
+}
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/dagre-d3-es@7.0.10/node_modules/dagre-d3-es/src/dagre/order/index.js
+
+
+
+
+
+
+
+
+
+
+
+/*
+ * Applies heuristics to minimize edge crossings in the graph and sets the best
+ * order solution as an order attribute on each node.
+ *
+ * Pre-conditions:
+ *
+ * 1. Graph must be DAG
+ * 2. Graph nodes must be objects with a "rank" attribute
+ * 3. Graph edges must have the "weight" attribute
+ *
+ * Post-conditions:
+ *
+ * 1. Graph nodes will have an "order" attribute based on the results of the
+ * algorithm.
+ */
+function order(g) {
+ var maxRank = util_maxRank(g),
+ downLayerGraphs = buildLayerGraphs(g, range/* default */.Z(1, maxRank + 1), 'inEdges'),
+ upLayerGraphs = buildLayerGraphs(g, range/* default */.Z(maxRank - 1, -1, -1), 'outEdges');
+
+ var layering = initOrder(g);
+ assignOrder(g, layering);
+
+ var bestCC = Number.POSITIVE_INFINITY,
+ best;
+
+ for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) {
+ sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2);
+
+ layering = buildLayerMatrix(g);
+ var cc = crossCount(g, layering);
+ if (cc < bestCC) {
+ lastBest = 0;
+ best = lodash_es_cloneDeep(layering);
+ bestCC = cc;
+ }
+ }
+
+ assignOrder(g, best);
+}
+
+function buildLayerGraphs(g, ranks, relationship) {
+ return map/* default */.Z(ranks, function (rank) {
+ return buildLayerGraph(g, rank, relationship);
+ });
+}
+
+function sweepLayerGraphs(layerGraphs, biasRight) {
+ var cg = new graphlib/* Graph */.k();
+ forEach/* default */.Z(layerGraphs, function (lg) {
+ var root = lg.graph().root;
+ var sorted = sortSubgraph(lg, root, cg, biasRight);
+ forEach/* default */.Z(sorted.vs, function (v, i) {
+ lg.node(v).order = i;
+ });
+ addSubgraphConstraints(lg, cg, sorted.vs);
+ });
+}
+
+function assignOrder(g, layering) {
+ forEach/* default */.Z(layering, function (layer) {
+ forEach/* default */.Z(layer, function (v, i) {
+ g.node(v).order = i;
+ });
+ });
+}
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/dagre-d3-es@7.0.10/node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js
+
+
+
+
+function parentDummyChains(g) {
+ var postorderNums = parent_dummy_chains_postorder(g);
+
+ forEach/* default */.Z(g.graph().dummyChains, function (v) {
+ var node = g.node(v);
+ var edgeObj = node.edgeObj;
+ var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w);
+ var path = pathData.path;
+ var lca = pathData.lca;
+ var pathIdx = 0;
+ var pathV = path[pathIdx];
+ var ascending = true;
+
+ while (v !== edgeObj.w) {
+ node = g.node(v);
+
+ if (ascending) {
+ while ((pathV = path[pathIdx]) !== lca && g.node(pathV).maxRank < node.rank) {
+ pathIdx++;
+ }
+
+ if (pathV === lca) {
+ ascending = false;
+ }
+ }
+
+ if (!ascending) {
+ while (
+ pathIdx < path.length - 1 &&
+ g.node((pathV = path[pathIdx + 1])).minRank <= node.rank
+ ) {
+ pathIdx++;
+ }
+ pathV = path[pathIdx];
+ }
+
+ g.setParent(v, pathV);
+ v = g.successors(v)[0];
+ }
+ });
+}
+
+// Find a path from v to w through the lowest common ancestor (LCA). Return the
+// full path and the LCA.
+function findPath(g, postorderNums, v, w) {
+ var vPath = [];
+ var wPath = [];
+ var low = Math.min(postorderNums[v].low, postorderNums[w].low);
+ var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim);
+ var parent;
+ var lca;
+
+ // Traverse up from v to find the LCA
+ parent = v;
+ do {
+ parent = g.parent(parent);
+ vPath.push(parent);
+ } while (parent && (postorderNums[parent].low > low || lim > postorderNums[parent].lim));
+ lca = parent;
+
+ // Traverse from w to LCA
+ parent = w;
+ while ((parent = g.parent(parent)) !== lca) {
+ wPath.push(parent);
+ }
+
+ return { path: vPath.concat(wPath.reverse()), lca: lca };
+}
+
+function parent_dummy_chains_postorder(g) {
+ var result = {};
+ var lim = 0;
+
+ function dfs(v) {
+ var low = lim;
+ forEach/* default */.Z(g.children(v), dfs);
+ result[v] = { low: low, lim: lim++ };
+ }
+ forEach/* default */.Z(g.children(), dfs);
+
+ return result;
+}
+
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_castFunction.js
+var _castFunction = __webpack_require__(53496);
+;// CONCATENATED MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/forOwn.js
+
+
+
+/**
+ * Iterates over own enumerable string keyed properties of an object and
+ * invokes `iteratee` for each property. The iteratee is invoked with three
+ * arguments: (value, key, object). Iteratee functions may exit iteration
+ * early by explicitly returning `false`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.3.0
+ * @category Object
+ * @param {Object} object The object to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @returns {Object} Returns `object`.
+ * @see _.forOwnRight
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.forOwn(new Foo, function(value, key) {
+ * console.log(key);
+ * });
+ * // => Logs 'a' then 'b' (iteration order is not guaranteed).
+ */
+function forOwn(object, iteratee) {
+ return object && (0,_baseForOwn/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee));
+}
+
+/* harmony default export */ const lodash_es_forOwn = (forOwn);
+
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseFor.js + 1 modules
+var _baseFor = __webpack_require__(29148);
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/keysIn.js + 2 modules
+var keysIn = __webpack_require__(32817);
+;// CONCATENATED MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/forIn.js
+
+
+
+
+/**
+ * Iterates over own and inherited enumerable string keyed properties of an
+ * object and invokes `iteratee` for each property. The iteratee is invoked
+ * with three arguments: (value, key, object). Iteratee functions may exit
+ * iteration early by explicitly returning `false`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.3.0
+ * @category Object
+ * @param {Object} object The object to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @returns {Object} Returns `object`.
+ * @see _.forInRight
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.forIn(new Foo, function(value, key) {
+ * console.log(key);
+ * });
+ * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).
+ */
+function forIn(object, iteratee) {
+ return object == null
+ ? object
+ : (0,_baseFor/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee), keysIn/* default */.Z);
+}
+
+/* harmony default export */ const lodash_es_forIn = (forIn);
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/dagre-d3-es@7.0.10/node_modules/dagre-d3-es/src/dagre/position/bk.js
+
+
+
+
+/*
+ * This module provides coordinate assignment based on Brandes and Köpf, "Fast
+ * and Simple Horizontal Coordinate Assignment."
+ */
+
+
+
+/*
+ * Marks all edges in the graph with a type-1 conflict with the "type1Conflict"
+ * property. A type-1 conflict is one where a non-inner segment crosses an
+ * inner segment. An inner segment is an edge with both incident nodes marked
+ * with the "dummy" property.
+ *
+ * This algorithm scans layer by layer, starting with the second, for type-1
+ * conflicts between the current layer and the previous layer. For each layer
+ * it scans the nodes from left to right until it reaches one that is incident
+ * on an inner segment. It then scans predecessors to determine if they have
+ * edges that cross that inner segment. At the end a final scan is done for all
+ * nodes on the current rank to see if they cross the last visited inner
+ * segment.
+ *
+ * This algorithm (safely) assumes that a dummy node will only be incident on a
+ * single node in the layers being scanned.
+ */
+function findType1Conflicts(g, layering) {
+ var conflicts = {};
+
+ function visitLayer(prevLayer, layer) {
+ var // last visited node in the previous layer that is incident on an inner
+ // segment.
+ k0 = 0,
+ // Tracks the last node in this layer scanned for crossings with a type-1
+ // segment.
+ scanPos = 0,
+ prevLayerLength = prevLayer.length,
+ lastNode = lodash_es_last(layer);
+
+ forEach/* default */.Z(layer, function (v, i) {
+ var w = findOtherInnerSegmentNode(g, v),
+ k1 = w ? g.node(w).order : prevLayerLength;
+
+ if (w || v === lastNode) {
+ forEach/* default */.Z(layer.slice(scanPos, i + 1), function (scanNode) {
+ forEach/* default */.Z(g.predecessors(scanNode), function (u) {
+ var uLabel = g.node(u),
+ uPos = uLabel.order;
+ if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g.node(scanNode).dummy)) {
+ addConflict(conflicts, u, scanNode);
+ }
+ });
+ });
+ // @ts-expect-error
+ scanPos = i + 1;
+ k0 = k1;
+ }
+ });
+
+ return layer;
+ }
+
+ reduce/* default */.Z(layering, visitLayer);
+ return conflicts;
+}
+
+function findType2Conflicts(g, layering) {
+ var conflicts = {};
+
+ function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) {
+ var v;
+ forEach/* default */.Z(range/* default */.Z(southPos, southEnd), function (i) {
+ v = south[i];
+ if (g.node(v).dummy) {
+ forEach/* default */.Z(g.predecessors(v), function (u) {
+ var uNode = g.node(u);
+ if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) {
+ addConflict(conflicts, u, v);
+ }
+ });
+ }
+ });
+ }
+
+ function visitLayer(north, south) {
+ var prevNorthPos = -1,
+ nextNorthPos,
+ southPos = 0;
+
+ forEach/* default */.Z(south, function (v, southLookahead) {
+ if (g.node(v).dummy === 'border') {
+ var predecessors = g.predecessors(v);
+ if (predecessors.length) {
+ nextNorthPos = g.node(predecessors[0]).order;
+ scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos);
+ // @ts-expect-error
+ southPos = southLookahead;
+ prevNorthPos = nextNorthPos;
+ }
+ }
+ scan(south, southPos, south.length, nextNorthPos, north.length);
+ });
+
+ return south;
+ }
+
+ reduce/* default */.Z(layering, visitLayer);
+ return conflicts;
+}
+
+function findOtherInnerSegmentNode(g, v) {
+ if (g.node(v).dummy) {
+ return lodash_es_find(g.predecessors(v), function (u) {
+ return g.node(u).dummy;
+ });
+ }
+}
+
+function addConflict(conflicts, v, w) {
+ if (v > w) {
+ var tmp = v;
+ v = w;
+ w = tmp;
+ }
+
+ var conflictsV = conflicts[v];
+ if (!conflictsV) {
+ conflicts[v] = conflictsV = {};
+ }
+ conflictsV[w] = true;
+}
+
+function hasConflict(conflicts, v, w) {
+ if (v > w) {
+ var tmp = v;
+ v = w;
+ w = tmp;
+ }
+ return has/* default */.Z(conflicts[v], w);
+}
+
+/*
+ * Try to align nodes into vertical "blocks" where possible. This algorithm
+ * attempts to align a node with one of its median neighbors. If the edge
+ * connecting a neighbor is a type-1 conflict then we ignore that possibility.
+ * If a previous node has already formed a block with a node after the node
+ * we're trying to form a block with, we also ignore that possibility - our
+ * blocks would be split in that scenario.
+ */
+function verticalAlignment(g, layering, conflicts, neighborFn) {
+ var root = {},
+ align = {},
+ pos = {};
+
+ // We cache the position here based on the layering because the graph and
+ // layering may be out of sync. The layering matrix is manipulated to
+ // generate different extreme alignments.
+ forEach/* default */.Z(layering, function (layer) {
+ forEach/* default */.Z(layer, function (v, order) {
+ root[v] = v;
+ align[v] = v;
+ pos[v] = order;
+ });
+ });
+
+ forEach/* default */.Z(layering, function (layer) {
+ var prevIdx = -1;
+ forEach/* default */.Z(layer, function (v) {
+ var ws = neighborFn(v);
+ if (ws.length) {
+ ws = lodash_es_sortBy(ws, function (w) {
+ return pos[w];
+ });
+ var mp = (ws.length - 1) / 2;
+ for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) {
+ var w = ws[i];
+ if (align[v] === v && prevIdx < pos[w] && !hasConflict(conflicts, v, w)) {
+ align[w] = v;
+ align[v] = root[v] = root[w];
+ prevIdx = pos[w];
+ }
+ }
+ }
+ });
+ });
+
+ return { root: root, align: align };
+}
+
+function horizontalCompaction(g, layering, root, align, reverseSep) {
+ // This portion of the algorithm differs from BK due to a number of problems.
+ // Instead of their algorithm we construct a new block graph and do two
+ // sweeps. The first sweep places blocks with the smallest possible
+ // coordinates. The second sweep removes unused space by moving blocks to the
+ // greatest coordinates without violating separation.
+ var xs = {},
+ blockG = buildBlockGraph(g, layering, root, 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();
+ }
+ }
+
+ // First pass, assign smallest coordinates
+ function pass1(elem) {
+ xs[elem] = blockG.inEdges(elem).reduce(function (acc, e) {
+ return Math.max(acc, xs[e.v] + blockG.edge(e));
+ }, 0);
+ }
+
+ // Second pass, assign greatest coordinates
+ function pass2(elem) {
+ var min = blockG.outEdges(elem).reduce(function (acc, e) {
+ return Math.min(acc, xs[e.w] - blockG.edge(e));
+ }, Number.POSITIVE_INFINITY);
+
+ var node = g.node(elem);
+ if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) {
+ xs[elem] = Math.max(xs[elem], min);
+ }
+ }
+
+ iterate(pass1, blockG.predecessors.bind(blockG));
+ iterate(pass2, blockG.successors.bind(blockG));
+
+ // Assign x coordinates to all nodes
+ forEach/* default */.Z(align, function (v) {
+ xs[v] = xs[root[v]];
+ });
+
+ return xs;
+}
+
+function buildBlockGraph(g, layering, root, reverseSep) {
+ var blockGraph = new graphlib/* Graph */.k(),
+ graphLabel = g.graph(),
+ sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep);
+
+ forEach/* default */.Z(layering, function (layer) {
+ var u;
+ forEach/* default */.Z(layer, function (v) {
+ var vRoot = root[v];
+ blockGraph.setNode(vRoot);
+ if (u) {
+ var uRoot = root[u],
+ prevMax = blockGraph.edge(uRoot, vRoot);
+ blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0));
+ }
+ u = v;
+ });
+ });
+
+ return blockGraph;
+}
+
+/*
+ * Returns the alignment that has the smallest width of the given alignments.
+ */
+function findSmallestWidthAlignment(g, xss) {
+ return lodash_es_minBy(values/* default */.Z(xss), function (xs) {
+ var max = Number.NEGATIVE_INFINITY;
+ var min = Number.POSITIVE_INFINITY;
+
+ lodash_es_forIn(xs, function (x, v) {
+ var halfWidth = width(g, v) / 2;
+
+ max = Math.max(x + halfWidth, max);
+ min = Math.min(x - halfWidth, min);
+ });
+
+ return max - min;
+ });
+}
+
+/*
+ * Align the coordinates of each of the layout alignments such that
+ * left-biased alignments have their minimum coordinate at the same point as
+ * the minimum coordinate of the smallest width alignment and right-biased
+ * alignments have their maximum coordinate at the same point as the maximum
+ * coordinate of the smallest width alignment.
+ */
+function alignCoordinates(xss, alignTo) {
+ var alignToVals = values/* default */.Z(alignTo),
+ alignToMin = lodash_es_min(alignToVals),
+ alignToMax = lodash_es_max(alignToVals);
+
+ forEach/* default */.Z(['u', 'd'], function (vert) {
+ forEach/* default */.Z(['l', 'r'], function (horiz) {
+ var alignment = vert + horiz,
+ xs = xss[alignment],
+ delta;
+ if (xs === alignTo) return;
+
+ var xsVals = values/* default */.Z(xs);
+ delta = horiz === 'l' ? alignToMin - lodash_es_min(xsVals) : alignToMax - lodash_es_max(xsVals);
+
+ if (delta) {
+ xss[alignment] = lodash_es_mapValues(xs, function (x) {
+ return x + delta;
+ });
+ }
+ });
+ });
+}
+
+function balance(xss, align) {
+ return lodash_es_mapValues(xss.ul, function (ignore, v) {
+ if (align) {
+ return xss[align.toLowerCase()][v];
+ } else {
+ var xs = lodash_es_sortBy(map/* default */.Z(xss, v));
+ return (xs[1] + xs[2]) / 2;
+ }
+ });
+}
+
+function positionX(g) {
+ var layering = buildLayerMatrix(g);
+ var conflicts = merge/* default */.Z(findType1Conflicts(g, layering), findType2Conflicts(g, layering));
+
+ var xss = {};
+ var adjustedLayering;
+ forEach/* default */.Z(['u', 'd'], function (vert) {
+ adjustedLayering = vert === 'u' ? layering : values/* default */.Z(layering).reverse();
+ forEach/* default */.Z(['l', 'r'], function (horiz) {
+ if (horiz === 'r') {
+ adjustedLayering = map/* default */.Z(adjustedLayering, function (inner) {
+ return values/* default */.Z(inner).reverse();
+ });
+ }
+
+ var neighborFn = (vert === 'u' ? g.predecessors : g.successors).bind(g);
+ var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn);
+ var xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === 'r');
+ if (horiz === 'r') {
+ xs = lodash_es_mapValues(xs, function (x) {
+ return -x;
+ });
+ }
+ xss[vert + horiz] = xs;
+ });
+ });
+
+ var smallestWidth = findSmallestWidthAlignment(g, xss);
+ alignCoordinates(xss, smallestWidth);
+ return balance(xss, g.graph().align);
+}
+
+function sep(nodeSep, edgeSep, reverseSep) {
+ return function (g, v, w) {
+ var vLabel = g.node(v);
+ var wLabel = g.node(w);
+ var sum = 0;
+ var delta;
+
+ sum += vLabel.width / 2;
+ if (has/* default */.Z(vLabel, 'labelpos')) {
+ switch (vLabel.labelpos.toLowerCase()) {
+ case 'l':
+ delta = -vLabel.width / 2;
+ break;
+ case 'r':
+ delta = vLabel.width / 2;
+ break;
+ }
+ }
+ if (delta) {
+ sum += reverseSep ? delta : -delta;
+ }
+ delta = 0;
+
+ sum += (vLabel.dummy ? edgeSep : nodeSep) / 2;
+ sum += (wLabel.dummy ? edgeSep : nodeSep) / 2;
+
+ sum += wLabel.width / 2;
+ if (has/* default */.Z(wLabel, 'labelpos')) {
+ switch (wLabel.labelpos.toLowerCase()) {
+ case 'l':
+ delta = wLabel.width / 2;
+ break;
+ case 'r':
+ delta = -wLabel.width / 2;
+ break;
+ }
+ }
+ if (delta) {
+ sum += reverseSep ? delta : -delta;
+ }
+ delta = 0;
+
+ return sum;
+ };
+}
+
+function width(g, v) {
+ return g.node(v).width;
+}
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/dagre-d3-es@7.0.10/node_modules/dagre-d3-es/src/dagre/position/index.js
+
+
+
+
+
+
+function position(g) {
+ g = asNonCompoundGraph(g);
+
+ positionY(g);
+ lodash_es_forOwn(positionX(g), function (x, v) {
+ g.node(v).x = x;
+ });
+}
+
+function positionY(g) {
+ var layering = buildLayerMatrix(g);
+ var rankSep = g.graph().ranksep;
+ var prevY = 0;
+ forEach/* default */.Z(layering, function (layer) {
+ var maxHeight = lodash_es_max(
+ map/* default */.Z(layer, function (v) {
+ return g.node(v).height;
+ })
+ );
+ forEach/* default */.Z(layer, function (v) {
+ g.node(v).y = prevY + maxHeight / 2;
+ });
+ prevY += maxHeight + rankSep;
+ });
+}
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/dagre-d3-es@7.0.10/node_modules/dagre-d3-es/src/dagre/layout.js
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function layout(g, opts) {
+ var time = opts && opts.debugTiming ? util_time : notime;
+ time('layout', function () {
+ var layoutGraph = time(' buildLayoutGraph', function () {
+ return buildLayoutGraph(g);
+ });
+ time(' runLayout', function () {
+ runLayout(layoutGraph, time);
+ });
+ time(' updateInputGraph', function () {
+ updateInputGraph(g, layoutGraph);
+ });
+ });
+}
+
+function runLayout(g, time) {
+ time(' makeSpaceForEdgeLabels', function () {
+ makeSpaceForEdgeLabels(g);
+ });
+ time(' removeSelfEdges', function () {
+ removeSelfEdges(g);
+ });
+ time(' acyclic', function () {
+ run(g);
+ });
+ time(' nestingGraph.run', function () {
+ nesting_graph_run(g);
+ });
+ time(' rank', function () {
+ rank(asNonCompoundGraph(g));
+ });
+ time(' injectEdgeLabelProxies', function () {
+ injectEdgeLabelProxies(g);
+ });
+ time(' removeEmptyRanks', function () {
+ removeEmptyRanks(g);
+ });
+ time(' nestingGraph.cleanup', function () {
+ cleanup(g);
+ });
+ time(' normalizeRanks', function () {
+ normalizeRanks(g);
+ });
+ time(' assignRankMinMax', function () {
+ assignRankMinMax(g);
+ });
+ time(' removeEdgeLabelProxies', function () {
+ removeEdgeLabelProxies(g);
+ });
+ time(' normalize.run', function () {
+ normalize_run(g);
+ });
+ time(' parentDummyChains', function () {
+ parentDummyChains(g);
+ });
+ time(' addBorderSegments', function () {
+ addBorderSegments(g);
+ });
+ time(' order', function () {
+ order(g);
+ });
+ time(' insertSelfEdges', function () {
+ insertSelfEdges(g);
+ });
+ time(' adjustCoordinateSystem', function () {
+ adjust(g);
+ });
+ time(' position', function () {
+ position(g);
+ });
+ time(' positionSelfEdges', function () {
+ positionSelfEdges(g);
+ });
+ time(' removeBorderNodes', function () {
+ removeBorderNodes(g);
+ });
+ time(' normalize.undo', function () {
+ normalize_undo(g);
+ });
+ time(' fixupEdgeLabelCoords', function () {
+ fixupEdgeLabelCoords(g);
+ });
+ time(' undoCoordinateSystem', function () {
+ coordinate_system_undo(g);
+ });
+ time(' translateGraph', function () {
+ translateGraph(g);
+ });
+ time(' assignNodeIntersects', function () {
+ assignNodeIntersects(g);
+ });
+ time(' reversePoints', function () {
+ reversePointsForReversedEdges(g);
+ });
+ time(' acyclic.undo', function () {
+ undo(g);
+ });
+}
+
+/*
+ * Copies final layout information from the layout graph back to the input
+ * graph. This process only copies whitelisted attributes from the layout graph
+ * to the input graph, so it serves as a good place to determine what
+ * attributes can influence layout.
+ */
+function updateInputGraph(inputGraph, layoutGraph) {
+ forEach/* default */.Z(inputGraph.nodes(), function (v) {
+ var inputLabel = inputGraph.node(v);
+ var layoutLabel = layoutGraph.node(v);
+
+ if (inputLabel) {
+ inputLabel.x = layoutLabel.x;
+ inputLabel.y = layoutLabel.y;
+
+ if (layoutGraph.children(v).length) {
+ inputLabel.width = layoutLabel.width;
+ inputLabel.height = layoutLabel.height;
+ }
+ }
+ });
+
+ forEach/* default */.Z(inputGraph.edges(), function (e) {
+ var inputLabel = inputGraph.edge(e);
+ var layoutLabel = layoutGraph.edge(e);
+
+ inputLabel.points = layoutLabel.points;
+ if (has/* default */.Z(layoutLabel, 'x')) {
+ inputLabel.x = layoutLabel.x;
+ inputLabel.y = layoutLabel.y;
+ }
+ });
+
+ inputGraph.graph().width = layoutGraph.graph().width;
+ inputGraph.graph().height = layoutGraph.graph().height;
+}
+
+var graphNumAttrs = ['nodesep', 'edgesep', 'ranksep', 'marginx', 'marginy'];
+var graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: 'tb' };
+var graphAttrs = ['acyclicer', 'ranker', 'rankdir', 'align'];
+var nodeNumAttrs = ['width', 'height'];
+var nodeDefaults = { width: 0, height: 0 };
+var edgeNumAttrs = ['minlen', 'weight', 'width', 'height', 'labeloffset'];
+var edgeDefaults = {
+ minlen: 1,
+ weight: 1,
+ width: 0,
+ height: 0,
+ labeloffset: 10,
+ labelpos: 'r',
+};
+var edgeAttrs = ['labelpos'];
+
+/*
+ * Constructs a new graph from the input graph, which can be used for layout.
+ * This process copies only whitelisted attributes from the input graph to the
+ * layout graph. Thus this function serves as a good place to determine what
+ * attributes can influence layout.
+ */
+function buildLayoutGraph(inputGraph) {
+ var g = new graphlib/* Graph */.k({ multigraph: true, compound: true });
+ var graph = canonicalize(inputGraph.graph());
+
+ g.setGraph(
+ merge/* default */.Z({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick/* default */.Z(graph, graphAttrs))
+ );
+
+ forEach/* default */.Z(inputGraph.nodes(), function (v) {
+ var node = canonicalize(inputGraph.node(v));
+ g.setNode(v, defaults/* default */.Z(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults));
+ g.setParent(v, inputGraph.parent(v));
+ });
+
+ forEach/* default */.Z(inputGraph.edges(), function (e) {
+ var edge = canonicalize(inputGraph.edge(e));
+ g.setEdge(
+ e,
+ merge/* default */.Z({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick/* default */.Z(edge, edgeAttrs))
+ );
+ });
+
+ return g;
+}
+
+/*
+ * This idea comes from the Gansner paper: to account for edge labels in our
+ * layout we split each rank in half by doubling minlen and halving ranksep.
+ * Then we can place labels at these mid-points between nodes.
+ *
+ * We also add some minimal padding to the width to push the label for the edge
+ * away from the edge itself a bit.
+ */
+function makeSpaceForEdgeLabels(g) {
+ var graph = g.graph();
+ graph.ranksep /= 2;
+ forEach/* default */.Z(g.edges(), function (e) {
+ var edge = g.edge(e);
+ edge.minlen *= 2;
+ if (edge.labelpos.toLowerCase() !== 'c') {
+ if (graph.rankdir === 'TB' || graph.rankdir === 'BT') {
+ edge.width += edge.labeloffset;
+ } else {
+ edge.height += edge.labeloffset;
+ }
+ }
+ });
+}
+
+/*
+ * Creates temporary dummy nodes that capture the rank in which each edge's
+ * label is going to, if it has one of non-zero width and height. We do this
+ * so that we can safely remove empty ranks while preserving balance for the
+ * label's position.
+ */
+function injectEdgeLabelProxies(g) {
+ forEach/* default */.Z(g.edges(), function (e) {
+ var edge = g.edge(e);
+ if (edge.width && edge.height) {
+ var v = g.node(e.v);
+ var w = g.node(e.w);
+ var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e };
+ addDummyNode(g, 'edge-proxy', label, '_ep');
+ }
+ });
+}
+
+function assignRankMinMax(g) {
+ var maxRank = 0;
+ forEach/* default */.Z(g.nodes(), function (v) {
+ var node = g.node(v);
+ if (node.borderTop) {
+ node.minRank = g.node(node.borderTop).rank;
+ node.maxRank = g.node(node.borderBottom).rank;
+ // @ts-expect-error
+ maxRank = lodash_es_max(maxRank, node.maxRank);
+ }
+ });
+ g.graph().maxRank = maxRank;
+}
+
+function removeEdgeLabelProxies(g) {
+ forEach/* default */.Z(g.nodes(), function (v) {
+ var node = g.node(v);
+ if (node.dummy === 'edge-proxy') {
+ g.edge(node.e).labelRank = node.rank;
+ g.removeNode(v);
+ }
+ });
+}
+
+function translateGraph(g) {
+ var minX = Number.POSITIVE_INFINITY;
+ var maxX = 0;
+ var minY = Number.POSITIVE_INFINITY;
+ var maxY = 0;
+ var graphLabel = g.graph();
+ var marginX = graphLabel.marginx || 0;
+ var marginY = graphLabel.marginy || 0;
+
+ function getExtremes(attrs) {
+ var x = attrs.x;
+ var y = attrs.y;
+ var w = attrs.width;
+ var h = attrs.height;
+ minX = Math.min(minX, x - w / 2);
+ maxX = Math.max(maxX, x + w / 2);
+ minY = Math.min(minY, y - h / 2);
+ maxY = Math.max(maxY, y + h / 2);
+ }
+
+ forEach/* default */.Z(g.nodes(), function (v) {
+ getExtremes(g.node(v));
+ });
+ forEach/* default */.Z(g.edges(), function (e) {
+ var edge = g.edge(e);
+ if (has/* default */.Z(edge, 'x')) {
+ getExtremes(edge);
+ }
+ });
+
+ minX -= marginX;
+ minY -= marginY;
+
+ forEach/* default */.Z(g.nodes(), function (v) {
+ var node = g.node(v);
+ node.x -= minX;
+ node.y -= minY;
+ });
+
+ forEach/* default */.Z(g.edges(), function (e) {
+ var edge = g.edge(e);
+ forEach/* default */.Z(edge.points, function (p) {
+ p.x -= minX;
+ p.y -= minY;
+ });
+ if (has/* default */.Z(edge, 'x')) {
+ edge.x -= minX;
+ }
+ if (has/* default */.Z(edge, 'y')) {
+ edge.y -= minY;
+ }
+ });
+
+ graphLabel.width = maxX - minX + marginX;
+ graphLabel.height = maxY - minY + marginY;
+}
+
+function assignNodeIntersects(g) {
+ forEach/* default */.Z(g.edges(), function (e) {
+ var edge = g.edge(e);
+ var nodeV = g.node(e.v);
+ var nodeW = g.node(e.w);
+ var p1, p2;
+ if (!edge.points) {
+ edge.points = [];
+ p1 = nodeW;
+ p2 = nodeV;
+ } else {
+ p1 = edge.points[0];
+ p2 = edge.points[edge.points.length - 1];
+ }
+ edge.points.unshift(intersectRect(nodeV, p1));
+ edge.points.push(intersectRect(nodeW, p2));
+ });
+}
+
+function fixupEdgeLabelCoords(g) {
+ forEach/* default */.Z(g.edges(), function (e) {
+ var edge = g.edge(e);
+ if (has/* default */.Z(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(g) {
+ forEach/* default */.Z(g.edges(), function (e) {
+ var edge = g.edge(e);
+ if (edge.reversed) {
+ edge.points.reverse();
+ }
+ });
+}
+
+function removeBorderNodes(g) {
+ forEach/* default */.Z(g.nodes(), function (v) {
+ if (g.children(v).length) {
+ var node = g.node(v);
+ var t = g.node(node.borderTop);
+ var b = g.node(node.borderBottom);
+ var l = g.node(lodash_es_last(node.borderLeft));
+ var r = g.node(lodash_es_last(node.borderRight));
+
+ node.width = Math.abs(r.x - l.x);
+ node.height = Math.abs(b.y - t.y);
+ node.x = l.x + node.width / 2;
+ node.y = t.y + node.height / 2;
+ }
+ });
+
+ forEach/* default */.Z(g.nodes(), function (v) {
+ if (g.node(v).dummy === 'border') {
+ g.removeNode(v);
+ }
+ });
+}
+
+function removeSelfEdges(g) {
+ forEach/* default */.Z(g.edges(), function (e) {
+ if (e.v === e.w) {
+ var node = g.node(e.v);
+ if (!node.selfEdges) {
+ node.selfEdges = [];
+ }
+ node.selfEdges.push({ e: e, label: g.edge(e) });
+ g.removeEdge(e);
+ }
+ });
+}
+
+function insertSelfEdges(g) {
+ var layers = buildLayerMatrix(g);
+ forEach/* default */.Z(layers, function (layer) {
+ var orderShift = 0;
+ forEach/* default */.Z(layer, function (v, i) {
+ var node = g.node(v);
+ node.order = i + orderShift;
+ forEach/* default */.Z(node.selfEdges, function (selfEdge) {
+ addDummyNode(
+ g,
+ 'selfedge',
+ {
+ width: selfEdge.label.width,
+ height: selfEdge.label.height,
+ rank: node.rank,
+ order: i + ++orderShift,
+ e: selfEdge.e,
+ label: selfEdge.label,
+ },
+ '_se'
+ );
+ });
+ delete node.selfEdges;
+ });
+ });
+}
+
+function positionSelfEdges(g) {
+ forEach/* default */.Z(g.nodes(), function (v) {
+ var node = g.node(v);
+ if (node.dummy === 'selfedge') {
+ var selfNode = g.node(node.e.v);
+ var x = selfNode.x + selfNode.width / 2;
+ var y = selfNode.y;
+ var dx = node.x - x;
+ var dy = selfNode.height / 2;
+ g.setEdge(node.e, node.label);
+ g.removeNode(v);
+ node.label.points = [
+ { x: x + (2 * dx) / 3, y: y - dy },
+ { x: x + (5 * dx) / 6, y: y - dy },
+ { x: x + dx, y: y },
+ { x: x + (5 * dx) / 6, y: y + dy },
+ { x: x + (2 * dx) / 3, y: y + dy },
+ ];
+ node.label.x = node.x;
+ node.label.y = node.y;
+ }
+ });
+}
+
+function selectNumberAttrs(obj, attrs) {
+ return lodash_es_mapValues(pick/* default */.Z(obj, attrs), Number);
+}
+
+function canonicalize(attrs) {
+ var newAttrs = {};
+ forEach/* default */.Z(attrs, function (v, k) {
+ newAttrs[k.toLowerCase()] = v;
+ });
+ return newAttrs;
+}
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/dagre-d3-es@7.0.10/node_modules/dagre-d3-es/src/dagre/index.js
+
+
+
+
+
+
+
+
+/***/ }),
+
+/***/ 65377:
+/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
+
+
+// EXPORTS
+__webpack_require__.d(__webpack_exports__, {
+ k: () => (/* binding */ Graph)
+});
+
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/has.js + 1 modules
+var has = __webpack_require__(27431);
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/constant.js
+var constant = __webpack_require__(6964);
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isFunction.js
+var isFunction = __webpack_require__(88987);
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/keys.js
+var keys = __webpack_require__(77251);
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/filter.js + 1 modules
+var filter = __webpack_require__(38364);
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isEmpty.js
+var isEmpty = __webpack_require__(15943);
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/forEach.js
+var forEach = __webpack_require__(79156);
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isUndefined.js
+var isUndefined = __webpack_require__(71180);
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseFlatten.js + 1 modules
+var _baseFlatten = __webpack_require__(84887);
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseRest.js
+var _baseRest = __webpack_require__(19851);
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_SetCache.js + 2 modules
+var _SetCache = __webpack_require__(61694);
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseFindIndex.js
+var _baseFindIndex = __webpack_require__(57394);
+;// CONCATENATED MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsNaN.js
+/**
+ * The base implementation of `_.isNaN` without support for number objects.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
+ */
+function baseIsNaN(value) {
+ return value !== value;
+}
+
+/* harmony default export */ const _baseIsNaN = (baseIsNaN);
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_strictIndexOf.js
+/**
+ * A specialized version of `_.indexOf` which performs strict equality
+ * comparisons of values, i.e. `===`.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {*} value The value to search for.
+ * @param {number} fromIndex The index to search from.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ */
+function strictIndexOf(array, value, fromIndex) {
+ var index = fromIndex - 1,
+ length = array.length;
+
+ while (++index < length) {
+ if (array[index] === value) {
+ return index;
+ }
+ }
+ return -1;
+}
+
+/* harmony default export */ const _strictIndexOf = (strictIndexOf);
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIndexOf.js
+
+
+
+
+/**
+ * The base implementation of `_.indexOf` without `fromIndex` bounds checks.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {*} value The value to search for.
+ * @param {number} fromIndex The index to search from.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ */
+function baseIndexOf(array, value, fromIndex) {
+ return value === value
+ ? _strictIndexOf(array, value, fromIndex)
+ : (0,_baseFindIndex/* default */.Z)(array, _baseIsNaN, fromIndex);
+}
+
+/* harmony default export */ const _baseIndexOf = (baseIndexOf);
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayIncludes.js
+
+
+/**
+ * A specialized version of `_.includes` for arrays without support for
+ * specifying an index to search from.
+ *
+ * @private
+ * @param {Array} [array] The array to inspect.
+ * @param {*} target The value to search for.
+ * @returns {boolean} Returns `true` if `target` is found, else `false`.
+ */
+function arrayIncludes(array, value) {
+ var length = array == null ? 0 : array.length;
+ return !!length && _baseIndexOf(array, value, 0) > -1;
+}
+
+/* harmony default export */ const _arrayIncludes = (arrayIncludes);
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayIncludesWith.js
+/**
+ * This function is like `arrayIncludes` except that it accepts a comparator.
+ *
+ * @private
+ * @param {Array} [array] The array to inspect.
+ * @param {*} target The value to search for.
+ * @param {Function} comparator The comparator invoked per element.
+ * @returns {boolean} Returns `true` if `target` is found, else `false`.
+ */
+function arrayIncludesWith(array, value, comparator) {
+ var index = -1,
+ length = array == null ? 0 : array.length;
+
+ while (++index < length) {
+ if (comparator(value, array[index])) {
+ return true;
+ }
+ }
+ return false;
+}
+
+/* harmony default export */ const _arrayIncludesWith = (arrayIncludesWith);
+
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cacheHas.js
+var _cacheHas = __webpack_require__(20465);
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Set.js
+var _Set = __webpack_require__(36169);
+;// CONCATENATED MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/noop.js
+/**
+ * This method returns `undefined`.
+ *
+ * @static
+ * @memberOf _
+ * @since 2.3.0
+ * @category Util
+ * @example
+ *
+ * _.times(2, _.noop);
+ * // => [undefined, undefined]
+ */
+function noop() {
+ // No operation performed.
+}
+
+/* harmony default export */ const lodash_es_noop = (noop);
+
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_setToArray.js
+var _setToArray = __webpack_require__(64423);
+;// CONCATENATED MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createSet.js
+
+
+
+
+/** Used as references for various `Number` constants. */
+var INFINITY = 1 / 0;
+
+/**
+ * Creates a set object of `values`.
+ *
+ * @private
+ * @param {Array} values The values to add to the set.
+ * @returns {Object} Returns the new set.
+ */
+var createSet = !(_Set/* default */.Z && (1 / (0,_setToArray/* default */.Z)(new _Set/* default */.Z([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) {
+ return new _Set/* default */.Z(values);
+};
+
+/* harmony default export */ const _createSet = (createSet);
+
+;// CONCATENATED MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseUniq.js
+
+
+
+
+
+
+
+/** Used as the size to enable large array optimizations. */
+var LARGE_ARRAY_SIZE = 200;
+
+/**
+ * The base implementation of `_.uniqBy` without support for iteratee shorthands.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {Function} [iteratee] The iteratee invoked per element.
+ * @param {Function} [comparator] The comparator invoked per element.
+ * @returns {Array} Returns the new duplicate free array.
+ */
+function baseUniq(array, iteratee, comparator) {
+ var index = -1,
+ includes = _arrayIncludes,
+ length = array.length,
+ isCommon = true,
+ result = [],
+ seen = result;
+
+ if (comparator) {
+ isCommon = false;
+ includes = _arrayIncludesWith;
+ }
+ else if (length >= LARGE_ARRAY_SIZE) {
+ var set = iteratee ? null : _createSet(array);
+ if (set) {
+ return (0,_setToArray/* default */.Z)(set);
+ }
+ isCommon = false;
+ includes = _cacheHas/* default */.Z;
+ seen = new _SetCache/* default */.Z;
+ }
+ else {
+ seen = iteratee ? [] : result;
+ }
+ outer:
+ while (++index < length) {
+ var value = array[index],
+ computed = iteratee ? iteratee(value) : value;
+
+ value = (comparator || value !== 0) ? value : 0;
+ if (isCommon && computed === computed) {
+ var seenIndex = seen.length;
+ while (seenIndex--) {
+ if (seen[seenIndex] === computed) {
+ continue outer;
+ }
+ }
+ if (iteratee) {
+ seen.push(computed);
+ }
+ result.push(value);
+ }
+ else if (!includes(seen, computed, comparator)) {
+ if (seen !== result) {
+ seen.push(computed);
+ }
+ result.push(value);
+ }
+ }
+ return result;
+}
+
+/* harmony default export */ const _baseUniq = (baseUniq);
+
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isArrayLikeObject.js
+var isArrayLikeObject = __webpack_require__(84488);
+;// CONCATENATED MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/union.js
+
+
+
+
+
+/**
+ * Creates an array of unique values, in order, from all given arrays using
+ * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+ * for equality comparisons.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Array
+ * @param {...Array} [arrays] The arrays to inspect.
+ * @returns {Array} Returns the new array of combined values.
+ * @example
+ *
+ * _.union([2], [1, 2]);
+ * // => [2, 1]
+ */
+var union = (0,_baseRest/* default */.Z)(function(arrays) {
+ return _baseUniq((0,_baseFlatten/* default */.Z)(arrays, 1, isArrayLikeObject/* default */.Z, true));
+});
+
+/* harmony default export */ const lodash_es_union = (union);
+
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/values.js + 1 modules
+var values = __webpack_require__(27942);
+// EXTERNAL MODULE: ./node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/reduce.js + 2 modules
+var reduce = __webpack_require__(43329);
+;// CONCATENATED MODULE: ./node_modules/.pnpm/dagre-d3-es@7.0.10/node_modules/dagre-d3-es/src/graphlib/graph.js
+
+
+var DEFAULT_EDGE_NAME = '\x00';
+var GRAPH_NODE = '\x00';
+var EDGE_KEY_DELIM = '\x01';
+
+// Implementation notes:
+//
+// * Node id query functions should return string ids for the nodes
+// * Edge id query functions should return an "edgeObj", edge object, that is
+// composed of enough information to uniquely identify an edge: {v, w, name}.
+// * Internally we use an "edgeId", a stringified form of the edgeObj, to
+// reference edges. This is because we need a performant way to look these
+// edges up and, object properties, which have string keys, are the closest
+// we're going to get to a performant hashtable in JavaScript.
+
+// Implementation notes:
+//
+// * Node id query functions should return string ids for the nodes
+// * Edge id query functions should return an "edgeObj", edge object, that is
+// composed of enough information to uniquely identify an edge: {v, w, name}.
+// * Internally we use an "edgeId", a stringified form of the edgeObj, to
+// reference edges. This is because we need a performant way to look these
+// edges up and, object properties, which have string keys, are the closest
+// we're going to get to a performant hashtable in JavaScript.
+class Graph {
+ constructor(opts = {}) {
+ this._isDirected = has/* default */.Z(opts, 'directed') ? opts.directed : true;
+ this._isMultigraph = has/* default */.Z(opts, 'multigraph') ? opts.multigraph : false;
+ this._isCompound = has/* default */.Z(opts, 'compound') ? opts.compound : false;
+
+ // Label for the graph itself
+ this._label = undefined;
+
+ // Defaults to be set when creating a new node
+ this._defaultNodeLabelFn = constant/* default */.Z(undefined);
+
+ // Defaults to be set when creating a new edge
+ this._defaultEdgeLabelFn = constant/* default */.Z(undefined);
+
+ // v -> label
+ this._nodes = {};
+
+ if (this._isCompound) {
+ // v -> parent
+ this._parent = {};
+
+ // v -> children
+ this._children = {};
+ this._children[GRAPH_NODE] = {};
+ }
+
+ // v -> edgeObj
+ this._in = {};
+
+ // u -> v -> Number
+ this._preds = {};
+
+ // v -> edgeObj
+ this._out = {};
+
+ // v -> w -> Number
+ this._sucs = {};
+
+ // e -> edgeObj
+ this._edgeObjs = {};
+
+ // e -> label
+ 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 */.Z(newDefault)) {
+ newDefault = constant/* default */.Z(newDefault);
+ }
+ this._defaultNodeLabelFn = newDefault;
+ return this;
+ }
+ nodeCount() {
+ return this._nodeCount;
+ }
+ nodes() {
+ return keys/* default */.Z(this._nodes);
+ }
+ sources() {
+ var self = this;
+ return filter/* default */.Z(this.nodes(), function (v) {
+ return isEmpty/* default */.Z(self._in[v]);
+ });
+ }
+ sinks() {
+ var self = this;
+ return filter/* default */.Z(this.nodes(), function (v) {
+ return isEmpty/* default */.Z(self._out[v]);
+ });
+ }
+ setNodes(vs, value) {
+ var args = arguments;
+ var self = this;
+ forEach/* default */.Z(vs, function (v) {
+ if (args.length > 1) {
+ self.setNode(v, value);
+ } else {
+ self.setNode(v);
+ }
+ });
+ return this;
+ }
+ setNode(v, value) {
+ if (has/* default */.Z(this._nodes, v)) {
+ if (arguments.length > 1) {
+ this._nodes[v] = value;
+ }
+ return this;
+ }
+
+ // @ts-expect-error
+ this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v);
+ if (this._isCompound) {
+ this._parent[v] = GRAPH_NODE;
+ this._children[v] = {};
+ this._children[GRAPH_NODE][v] = true;
+ }
+ this._in[v] = {};
+ this._preds[v] = {};
+ this._out[v] = {};
+ this._sucs[v] = {};
+ ++this._nodeCount;
+ return this;
+ }
+ node(v) {
+ return this._nodes[v];
+ }
+ hasNode(v) {
+ return has/* default */.Z(this._nodes, v);
+ }
+ removeNode(v) {
+ var self = this;
+ if (has/* default */.Z(this._nodes, v)) {
+ var removeEdge = function (e) {
+ self.removeEdge(self._edgeObjs[e]);
+ };
+ delete this._nodes[v];
+ if (this._isCompound) {
+ this._removeFromParentsChildList(v);
+ delete this._parent[v];
+ forEach/* default */.Z(this.children(v), function (child) {
+ self.setParent(child);
+ });
+ delete this._children[v];
+ }
+ forEach/* default */.Z(keys/* default */.Z(this._in[v]), removeEdge);
+ delete this._in[v];
+ delete this._preds[v];
+ forEach/* default */.Z(keys/* default */.Z(this._out[v]), removeEdge);
+ delete this._out[v];
+ delete this._sucs[v];
+ --this._nodeCount;
+ }
+ return this;
+ }
+ setParent(v, parent) {
+ if (!this._isCompound) {
+ throw new Error('Cannot set parent in a non-compound graph');
+ }
+
+ if (isUndefined/* default */.Z(parent)) {
+ parent = GRAPH_NODE;
+ } else {
+ // Coerce parent to string
+ parent += '';
+ for (var ancestor = parent; !isUndefined/* default */.Z(ancestor); ancestor = this.parent(ancestor)) {
+ if (ancestor === v) {
+ throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle');
+ }
+ }
+
+ this.setNode(parent);
+ }
+
+ this.setNode(v);
+ this._removeFromParentsChildList(v);
+ this._parent[v] = parent;
+ this._children[parent][v] = true;
+ return this;
+ }
+ _removeFromParentsChildList(v) {
+ delete this._children[this._parent[v]][v];
+ }
+ parent(v) {
+ if (this._isCompound) {
+ var parent = this._parent[v];
+ if (parent !== GRAPH_NODE) {
+ return parent;
+ }
+ }
+ }
+ children(v) {
+ if (isUndefined/* default */.Z(v)) {
+ v = GRAPH_NODE;
+ }
+
+ if (this._isCompound) {
+ var children = this._children[v];
+ if (children) {
+ return keys/* default */.Z(children);
+ }
+ } else if (v === GRAPH_NODE) {
+ return this.nodes();
+ } else if (this.hasNode(v)) {
+ return [];
+ }
+ }
+ predecessors(v) {
+ var predsV = this._preds[v];
+ if (predsV) {
+ return keys/* default */.Z(predsV);
+ }
+ }
+ successors(v) {
+ var sucsV = this._sucs[v];
+ if (sucsV) {
+ return keys/* default */.Z(sucsV);
+ }
+ }
+ neighbors(v) {
+ var preds = this.predecessors(v);
+ if (preds) {
+ return lodash_es_union(preds, this.successors(v));
+ }
+ }
+ isLeaf(v) {
+ var neighbors;
+ if (this.isDirected()) {
+ neighbors = this.successors(v);
+ } else {
+ neighbors = this.neighbors(v);
+ }
+ return neighbors.length === 0;
+ }
+ filterNodes(filter) {
+ // @ts-expect-error
+ var copy = new this.constructor({
+ directed: this._isDirected,
+ multigraph: this._isMultigraph,
+ compound: this._isCompound,
+ });
+
+ copy.setGraph(this.graph());
+
+ var self = this;
+ forEach/* default */.Z(this._nodes, function (value, v) {
+ if (filter(v)) {
+ copy.setNode(v, value);
+ }
+ });
+
+ forEach/* default */.Z(this._edgeObjs, function (e) {
+ // @ts-expect-error
+ if (copy.hasNode(e.v) && copy.hasNode(e.w)) {
+ copy.setEdge(e, self.edge(e));
+ }
+ });
+
+ var parents = {};
+ function findParent(v) {
+ var parent = self.parent(v);
+ if (parent === undefined || copy.hasNode(parent)) {
+ parents[v] = parent;
+ return parent;
+ } else if (parent in parents) {
+ return parents[parent];
+ } else {
+ return findParent(parent);
+ }
+ }
+
+ if (this._isCompound) {
+ forEach/* default */.Z(copy.nodes(), function (v) {
+ copy.setParent(v, findParent(v));
+ });
+ }
+
+ return copy;
+ }
+ /* === Edge functions ========== */
+ setDefaultEdgeLabel(newDefault) {
+ if (!isFunction/* default */.Z(newDefault)) {
+ newDefault = constant/* default */.Z(newDefault);
+ }
+ this._defaultEdgeLabelFn = newDefault;
+ return this;
+ }
+ edgeCount() {
+ return this._edgeCount;
+ }
+ edges() {
+ return values/* default */.Z(this._edgeObjs);
+ }
+ setPath(vs, value) {
+ var self = this;
+ var args = arguments;
+ reduce/* default */.Z(vs, function (v, w) {
+ if (args.length > 1) {
+ self.setEdge(v, w, value);
+ } else {
+ self.setEdge(v, w);
+ }
+ return w;
+ });
+ return this;
+ }
+ /*
+ * setEdge(v, w, [value, [name]])
+ * setEdge({ v, w, [name] }, [value])
+ */
+ setEdge() {
+ var v, w, name, value;
+ var valueSpecified = false;
+ var arg0 = arguments[0];
+
+ if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) {
+ v = arg0.v;
+ w = arg0.w;
+ name = arg0.name;
+ if (arguments.length === 2) {
+ value = arguments[1];
+ valueSpecified = true;
+ }
+ } else {
+ v = arg0;
+ w = arguments[1];
+ name = arguments[3];
+ if (arguments.length > 2) {
+ value = arguments[2];
+ valueSpecified = true;
+ }
+ }
+
+ v = '' + v;
+ w = '' + w;
+ if (!isUndefined/* default */.Z(name)) {
+ name = '' + name;
+ }
+
+ var e = edgeArgsToId(this._isDirected, v, w, name);
+ if (has/* default */.Z(this._edgeLabels, e)) {
+ if (valueSpecified) {
+ this._edgeLabels[e] = value;
+ }
+ return this;
+ }
+
+ if (!isUndefined/* default */.Z(name) && !this._isMultigraph) {
+ throw new Error('Cannot set a named edge when isMultigraph = false');
+ }
+
+ // It didn't exist, so we need to create it.
+ // First ensure the nodes exist.
+ this.setNode(v);
+ this.setNode(w);
+
+ // @ts-expect-error
+ this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name);
+
+ var edgeObj = edgeArgsToObj(this._isDirected, v, w, name);
+ // Ensure we add undirected edges in a consistent way.
+ v = edgeObj.v;
+ w = edgeObj.w;
+
+ Object.freeze(edgeObj);
+ this._edgeObjs[e] = edgeObj;
+ incrementOrInitEntry(this._preds[w], v);
+ incrementOrInitEntry(this._sucs[v], w);
+ this._in[w][e] = edgeObj;
+ this._out[v][e] = edgeObj;
+ this._edgeCount++;
+ return this;
+ }
+ edge(v, w, name) {
+ var e =
+ arguments.length === 1
+ ? edgeObjToId(this._isDirected, arguments[0])
+ : edgeArgsToId(this._isDirected, v, w, name);
+ return this._edgeLabels[e];
+ }
+ hasEdge(v, w, name) {
+ var e =
+ arguments.length === 1
+ ? edgeObjToId(this._isDirected, arguments[0])
+ : edgeArgsToId(this._isDirected, v, w, name);
+ return has/* default */.Z(this._edgeLabels, e);
+ }
+ removeEdge(v, w, name) {
+ var e =
+ arguments.length === 1
+ ? edgeObjToId(this._isDirected, arguments[0])
+ : edgeArgsToId(this._isDirected, v, w, name);
+ var edge = this._edgeObjs[e];
+ if (edge) {
+ v = edge.v;
+ w = edge.w;
+ delete this._edgeLabels[e];
+ delete this._edgeObjs[e];
+ decrementOrRemoveEntry(this._preds[w], v);
+ decrementOrRemoveEntry(this._sucs[v], w);
+ delete this._in[w][e];
+ delete this._out[v][e];
+ this._edgeCount--;
+ }
+ return this;
+ }
+ inEdges(v, u) {
+ var inV = this._in[v];
+ if (inV) {
+ var edges = values/* default */.Z(inV);
+ if (!u) {
+ return edges;
+ }
+ return filter/* default */.Z(edges, function (edge) {
+ return edge.v === u;
+ });
+ }
+ }
+ outEdges(v, w) {
+ var outV = this._out[v];
+ if (outV) {
+ var edges = values/* default */.Z(outV);
+ if (!w) {
+ return edges;
+ }
+ return filter/* default */.Z(edges, function (edge) {
+ return edge.w === w;
+ });
+ }
+ }
+ nodeEdges(v, w) {
+ var inEdges = this.inEdges(v, w);
+ if (inEdges) {
+ return inEdges.concat(this.outEdges(v, w));
+ }
+ }
+}
+
+/* Number of nodes in the graph. Should only be changed by the implementation. */
+Graph.prototype._nodeCount = 0;
+
+/* Number of edges in the graph. Should only be changed by the implementation. */
+Graph.prototype._edgeCount = 0;
+
+function incrementOrInitEntry(map, k) {
+ if (map[k]) {
+ map[k]++;
+ } else {
+ map[k] = 1;
+ }
+}
+
+function decrementOrRemoveEntry(map, k) {
+ if (!--map[k]) {
+ delete map[k];
+ }
+}
+
+function edgeArgsToId(isDirected, v_, w_, name) {
+ var v = '' + v_;
+ var w = '' + w_;
+ if (!isDirected && v > w) {
+ var tmp = v;
+ v = w;
+ w = tmp;
+ }
+ return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (isUndefined/* default */.Z(name) ? DEFAULT_EDGE_NAME : name);
+}
+
+function edgeArgsToObj(isDirected, v_, w_, name) {
+ var v = '' + v_;
+ var w = '' + w_;
+ if (!isDirected && v > w) {
... 507395 lines suppressed ...