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 2024/03/07 01:49:57 UTC
(incubator-answer-website) branch dist-pages updated: deploy: 4560ef41b97a1444346e017be0ac2c0a9bfe2e0a
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 9403e74e deploy: 4560ef41b97a1444346e017be0ac2c0a9bfe2e0a
9403e74e is described below
commit 9403e74eef7a7cb44347ada8a188037ff881b27d
Author: fenbox <fe...@users.noreply.github.com>
AuthorDate: Thu Mar 7 01:49:53 2024 +0000
deploy: 4560ef41b97a1444346e017be0ac2c0a9bfe2e0a
---
404.html | 7 +-
.../{styles.2252c3e0.css => styles.ed57e243.css} | 2 +-
...tus.drawio-c037079cbbf31ac37fdb578bb32a35c7.svg | 173 +
...tus.drawio-ba8e6f72b87ff5452bcc4dd8cbdc7dea.svg | 226 +
...screenshot-74a5a4658de6431b7c42f3bd3de532f9.png | Bin 61506 -> 0 bytes
...screenshot-c118d2fcfb1faaf1d9df2e8b5e8bc1a8.png | Bin 0 -> 88558 bytes
...uth.drawio-1bf9a76ad7f50a2b20755d20b739feea.svg | 500 +
...nup.drawio-71d1d02e80eeaa95c58a30d2451df863.svg | 188 +
.../js/01a85c17.ea1681f0.js | 2 +-
assets/js/0480b142.04edd1ae.js | 1 -
assets/js/0480b142.c96108ee.js | 1 +
assets/js/1008.647e7b10.js | 1 -
assets/js/{1061.4180c433.js => 1061.559c3c1d.js} | 2 +-
assets/js/1300.4c852510.js | 1 -
assets/js/1516.94768e46.js | 1 -
assets/js/1620c6a0.01a7e12a.js | 1 -
assets/js/1620c6a0.203cc2ba.js | 1 +
assets/js/1711.136f6393.js | 2 -
assets/js/1711.136f6393.js.LICENSE.txt | 18 -
.../js/17896441.08e62453.js | 2 +-
.../{1a4e3797.43bebe37.js => 1a4e3797.c608bffb.js} | 4 +-
...ICENSE.txt => 1a4e3797.c608bffb.js.LICENSE.txt} | 0
assets/js/1a8837ce.03d18650.js | 1 +
assets/js/1a8837ce.99fcbdac.js | 1 -
.../js/1df93b7f.a5074a14.js | 2 +-
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/298.f8893466.js | 1 -
assets/js/2a510483.54691518.js | 2 +
...ICENSE.txt => 2a510483.54691518.js.LICENSE.txt} | 0
assets/js/2a510483.7b977ab9.js | 2 -
.../js/2c22be1c.615af791.js | 4 +-
...ICENSE.txt => 2c22be1c.615af791.js.LICENSE.txt} | 0
assets/js/3093.33e255c3.js | 1 -
assets/js/310.14ee915c.js | 3429 --
assets/js/3198.6f9adc87.js | 1 -
assets/js/32.97fad14b.js | 10780 ----
assets/js/3410.a246e730.js | 1 -
assets/js/357.760272fa.js | 1320 -
assets/js/3694.93979497.js | 1 -
assets/js/3880.a412433e.js | 1 -
.../{3a3fadac.b578b9b0.js => 3a3fadac.b254c80e.js} | 2 +-
.../js/3a86a8c5.4d766497.js | 4 +-
...ICENSE.txt => 3a86a8c5.4d766497.js.LICENSE.txt} | 0
assets/js/415707e9.2023e883.js | 1 -
assets/js/415707e9.91747238.js | 1 +
assets/js/422.e7052dec.js | 2600 -
assets/js/423.89d88c7e.js | 10323 ----
assets/js/449.a598088d.js | 50986 -------------------
assets/js/489.b280ee59.js | 23570 ---------
assets/js/5.7a6d4c98.js | 1 -
assets/js/5.822c6d59.js | 1227 -
assets/js/51168d66.569fe5ae.js | 1 +
assets/js/51168d66.63f9368a.js | 1 -
assets/js/516.0f704221.js | 26575 ----------
assets/js/525.d5635339.js | 10814 ----
assets/js/5422.a961dbf1.js | 1 -
assets/js/54f44165.82a4074c.js | 1 -
assets/js/54f44165.88a81497.js | 1 +
assets/js/5525.5255e838.js | 1 -
assets/js/5771c448.09fa2dbd.js | 1 +
assets/js/5771c448.249e1238.js | 1 -
assets/js/5846.e79acaf6.js | 1 -
assets/js/5ac42693.59b0f8cc.js | 1 -
assets/js/5ac42693.ebe03cec.js | 1 +
assets/js/5b5f4945.6b6a86e6.js | 1 +
assets/js/5b5f4945.fe2e08cb.js | 1 -
.../{5e95c892.67ebe9ad.js => 5e95c892.383858ff.js} | 2 +-
assets/js/6032.e67c911c.js | 1 -
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/685.82d4b9a0.js | 1410 -
assets/js/68eaa3f5.4c4da877.js | 1 +
assets/js/68eaa3f5.7b7e1922.js | 1 -
assets/js/692c6f9f.ac84f3df.js | 1 -
assets/js/692c6f9f.b0a0359e.js | 1 +
assets/js/697.97d60bb9.js | 739 -
assets/js/6f494215.2d06cd04.js | 1 +
assets/js/6f494215.da265acd.js | 1 -
assets/js/6fd9b8bb.28a45205.js | 1 +
assets/js/6fd9b8bb.b662185e.js | 1 -
assets/js/70fd4878.2de578a4.js | 1 -
assets/js/70fd4878.af26469e.js | 1 +
assets/js/7156.9bd2369b.js | 2 +
assets/js/7156.9bd2369b.js.LICENSE.txt | 8 +
assets/js/72a4391e.c0452579.js | 1 -
assets/js/72a4391e.f0261fe0.js | 1 +
.../js/72f5456f.f5833345.js | 4 +-
...ICENSE.txt => 72f5456f.f5833345.js.LICENSE.txt} | 0
assets/js/744.95e9770e.js | 10065 ----
assets/js/7744.a5b332a3.js | 1 -
assets/js/{7762.a8ba1189.js => 7762.a8202189.js} | 2 +-
assets/js/7892.eeacadb8.js | 1 -
assets/js/8.0f1a168f.js | 14570 ------
assets/js/8310.ee3cef01.js | 1 -
assets/js/846.0218453f.js | 2106 -
assets/js/872d4ab4.2aab7fa4.js | 1 -
assets/js/872d4ab4.67ae2dff.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 -
.../js/8b3a140c.7c8d8c38.js | 4 +-
...ICENSE.txt => 8b3a140c.7c8d8c38.js.LICENSE.txt} | 0
assets/js/908.f74f140d.js | 1758 -
assets/js/93.865c82a7.js | 25876 ----------
assets/js/9357.967dd3dc.js | 1 -
.../{935f2afb.20d8341d.js => 935f2afb.8b6d07f1.js} | 2 +-
assets/js/977e6cb2.88006647.js | 1 -
assets/js/977e6cb2.ae1c45e7.js | 1 +
assets/js/992.32945d3b.js | 540 -
.../{9e4087bc.93101ad2.js => 9e4087bc.89e8c427.js} | 2 +-
assets/js/a09c2993.249e0220.js | 1 +
assets/js/a09c2993.fbd80fc7.js | 1 -
assets/js/a4adfb7f.b1019c7a.js | 1 +
assets/js/a4adfb7f.bae81473.js | 1 -
assets/js/a5eff934.abd86253.js | 1 -
assets/js/a5eff934.e4e79e55.js | 1 +
.../{a72448b0.942fdbb1.js => a72448b0.ff48a241.js} | 4 +-
...ICENSE.txt => a72448b0.ff48a241.js.LICENSE.txt} | 0
assets/js/a98c1148.3c377d46.js | 1 +
assets/js/a98c1148.7c190875.js | 1 -
assets/js/b2b494f3.e87317be.js | 1 +
assets/js/b2b494f3.f2960a34.js | 1 -
assets/js/bb350c59.2e44b86c.js | 1 +
assets/js/bb350c59.aad72c66.js | 1 -
assets/js/c1cb8fca.13328676.js | 1 +
assets/js/c1cb8fca.78f38b49.js | 1 -
assets/js/d7ef3cd8.057df049.js | 1 -
assets/js/d7ef3cd8.1901c51c.js | 1 +
assets/js/da6654f2.a55c8e69.js | 1 +
assets/js/da6654f2.c7e7eae2.js | 1 -
assets/js/dc8b965f.39ce705b.js | 1 -
assets/js/dc8b965f.3f00c339.js | 1 +
assets/js/e438ab2a.18b22e3f.js | 1 +
assets/js/e438ab2a.97033efa.js | 1 -
assets/js/e4ae456e.1b177c1f.js | 1 +
assets/js/e4ae456e.986fddaa.js | 1 -
assets/js/eafd45de.4615afef.js | 1 +
assets/js/eafd45de.8195bcb6.js | 1 -
assets/js/f493f8eb.6633e50d.js | 1 +
assets/js/f493f8eb.7c13983f.js | 1 -
assets/js/f8a2828b.991f8136.js | 1 -
assets/js/f8a2828b.dbb3520c.js | 1 +
assets/js/main.01c4bcd3.js | 2 +
...js.LICENSE.txt => main.01c4bcd3.js.LICENSE.txt} | 0
assets/js/main.8ba0868c.js | 2 -
assets/js/runtime~main.11e48caf.js | 1 +
assets/js/runtime~main.fd137039.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 +-
.../index.html | 7 +-
.../index.html | 7 +-
.../answer-1.2.1-ask-better-find-better/index.html | 7 +-
.../first-contribution-come-to-answer/index.html | 7 +-
blog/2024/01/26/deploy-answer-https/index.html | 7 +-
.../index.html | 7 +-
.../index.html | 7 +-
blog/2024/02/20/answer-1.2.5-is-ready/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/security/index.html | 9 +-
community/translation/index.html | 9 +-
contact/index.html | 7 +-
docs/api/index.html | 9 +-
docs/command-line/index.html | 9 +-
docs/configfile/index.html | 9 +-
docs/database/index.html | 9 +-
docs/env/index.html | 9 +-
docs/faq/index.html | 9 +-
docs/flags/index.html | 9 +-
docs/index.html | 9 +-
docs/installation/index.html | 9 +-
docs/moderation/index.html | 9 +-
docs/notice/index.html | 9 +-
docs/permission/index.html | 9 +-
docs/plugins/index.html | 9 +-
docs/questions/index.html | 16 +-
docs/reputation/index.html | 9 +-
docs/review/index.html | 9 +-
docs/settings/index.html | 9 +-
docs/tags/index.html | 9 +-
docs/upgrade/index.html | 9 +-
docs/users/index.html | 15 +-
img/docs/questions-answer-status.drawio.svg | 173 +
img/docs/questions-question-status.drawio.svg | 226 +
img/docs/users-oauth.drawio.svg | 500 +
img/docs/users-signup.drawio.svg | 188 +
img/screenshot.png | Bin 61506 -> 88558 bytes
index.html | 7 +-
plugins/index.html | 7 +-
search/index.html | 7 +-
zh-CN/404.html | 7 +-
.../{styles.5967b50a.css => styles.589af3e3.css} | 2 +-
...tus.drawio-c037079cbbf31ac37fdb578bb32a35c7.svg | 173 +
...tus.drawio-ba8e6f72b87ff5452bcc4dd8cbdc7dea.svg | 226 +
...screenshot-74a5a4658de6431b7c42f3bd3de532f9.png | Bin 61506 -> 0 bytes
...screenshot-c118d2fcfb1faaf1d9df2e8b5e8bc1a8.png | Bin 0 -> 88558 bytes
...uth.drawio-1bf9a76ad7f50a2b20755d20b739feea.svg | 500 +
...nup.drawio-71d1d02e80eeaa95c58a30d2451df863.svg | 188 +
.../assets/js/01a85c17.ea1681f0.js | 2 +-
zh-CN/assets/js/0bbd7524.1eab2b0d.js | 1 -
zh-CN/assets/js/0bbd7524.485433be.js | 1 +
zh-CN/assets/js/1008.647e7b10.js | 1 -
.../js/{1061.4180c433.js => 1061.559c3c1d.js} | 2 +-
zh-CN/assets/js/1300.4c852510.js | 1 -
zh-CN/assets/js/1516.94768e46.js | 1 -
zh-CN/assets/js/1620c6a0.6aed2732.js | 1 +
zh-CN/assets/js/1620c6a0.72604114.js | 1 -
zh-CN/assets/js/1711.136f6393.js | 2 -
zh-CN/assets/js/1711.136f6393.js.LICENSE.txt | 18 -
.../assets/js/17896441.08e62453.js | 2 +-
.../{1a4e3797.43bebe37.js => 1a4e3797.c608bffb.js} | 4 +-
...ICENSE.txt => 1a4e3797.c608bffb.js.LICENSE.txt} | 0
zh-CN/assets/js/1a8837ce.cd4e4482.js | 1 +
zh-CN/assets/js/1a8837ce.f2a0c203.js | 1 -
.../assets/js/1df93b7f.a5074a14.js | 2 +-
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/283536cd.9c6924c4.js | 1 +
zh-CN/assets/js/283536cd.c18fb5bd.js | 1 -
zh-CN/assets/js/298.f8893466.js | 1 -
zh-CN/assets/js/2a510483.56b111a7.js | 2 +
...ICENSE.txt => 2a510483.56b111a7.js.LICENSE.txt} | 0
zh-CN/assets/js/2a510483.d79d8743.js | 2 -
.../assets/js/2c22be1c.615af791.js | 4 +-
...ICENSE.txt => 2c22be1c.615af791.js.LICENSE.txt} | 0
zh-CN/assets/js/3093.33e255c3.js | 1 -
zh-CN/assets/js/310.14ee915c.js | 3429 --
zh-CN/assets/js/3198.6f9adc87.js | 1 -
zh-CN/assets/js/32.97fad14b.js | 10780 ----
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/3880.a412433e.js | 1 -
.../{3a3fadac.b578b9b0.js => 3a3fadac.b254c80e.js} | 2 +-
.../assets/js/3a86a8c5.4d766497.js | 4 +-
...ICENSE.txt => 3a86a8c5.4d766497.js.LICENSE.txt} | 0
zh-CN/assets/js/415707e9.58672178.js | 1 +
zh-CN/assets/js/415707e9.9362294e.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/489.b280ee59.js | 23570 ---------
zh-CN/assets/js/4958df33.47e493ee.js | 1 +
zh-CN/assets/js/4958df33.83ec6249.js | 1 -
zh-CN/assets/js/5.7a6d4c98.js | 1 -
zh-CN/assets/js/5.822c6d59.js | 1227 -
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.98ba2c29.js | 1 -
zh-CN/assets/js/565f0463.fdf7cce4.js | 1 +
zh-CN/assets/js/5771c448.8d74b733.js | 1 +
zh-CN/assets/js/5771c448.d9831883.js | 1 -
zh-CN/assets/js/5846.e79acaf6.js | 1 -
zh-CN/assets/js/5ac42693.9f8a2fb5.js | 1 -
zh-CN/assets/js/5ac42693.a83ee12f.js | 1 +
zh-CN/assets/js/5b5253e0.0c2586dd.js | 1 -
zh-CN/assets/js/5b5253e0.0e3107ef.js | 1 +
zh-CN/assets/js/5b5f4945.1fe9662a.js | 1 +
zh-CN/assets/js/5b5f4945.30454d87.js | 1 -
.../{5e95c892.67ebe9ad.js => 5e95c892.383858ff.js} | 2 +-
zh-CN/assets/js/6032.e67c911c.js | 1 -
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/692c6f9f.02828227.js | 1 -
zh-CN/assets/js/692c6f9f.27e0e08f.js | 1 +
zh-CN/assets/js/697.97d60bb9.js | 739 -
zh-CN/assets/js/6b66dba1.9ef90053.js | 1 +
zh-CN/assets/js/6b66dba1.bde0b380.js | 1 -
zh-CN/assets/js/6f494215.b56bfc7d.js | 1 -
zh-CN/assets/js/6f494215.e5198bff.js | 1 +
zh-CN/assets/js/6fd9b8bb.51dadc51.js | 1 +
zh-CN/assets/js/6fd9b8bb.6dc30baf.js | 1 -
zh-CN/assets/js/70fd4878.93f6780a.js | 1 -
zh-CN/assets/js/70fd4878.ed771e60.js | 1 +
zh-CN/assets/js/7156.9bd2369b.js | 2 +
zh-CN/assets/js/7156.9bd2369b.js.LICENSE.txt | 8 +
zh-CN/assets/js/719ef308.17c3707f.js | 1 -
zh-CN/assets/js/719ef308.cd04a37d.js | 1 +
.../assets/js/72f5456f.f5833345.js | 4 +-
...ICENSE.txt => 72f5456f.f5833345.js.LICENSE.txt} | 0
zh-CN/assets/js/731fb1ee.305bcf92.js | 1 -
zh-CN/assets/js/731fb1ee.f33e4c71.js | 1 +
zh-CN/assets/js/744.95e9770e.js | 10065 ----
zh-CN/assets/js/7744.a5b332a3.js | 1 -
.../js/{7762.a8ba1189.js => 7762.a8202189.js} | 2 +-
zh-CN/assets/js/7892.eeacadb8.js | 1 -
zh-CN/assets/js/7f220a89.0ba0a9f4.js | 1 +
zh-CN/assets/js/7f220a89.918b1c1e.js | 1 -
zh-CN/assets/js/8.0f1a168f.js | 14570 ------
zh-CN/assets/js/8310.ee3cef01.js | 1 -
zh-CN/assets/js/846.0218453f.js | 2106 -
zh-CN/assets/js/872d4ab4.220011f0.js | 1 -
zh-CN/assets/js/872d4ab4.b973aa9a.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 -
.../assets/js/8b3a140c.7c8d8c38.js | 4 +-
...ICENSE.txt => 8b3a140c.7c8d8c38.js.LICENSE.txt} | 0
zh-CN/assets/js/908.f74f140d.js | 1758 -
zh-CN/assets/js/93.865c82a7.js | 25876 ----------
zh-CN/assets/js/9357.967dd3dc.js | 1 -
.../{935f2afb.8df5249b.js => 935f2afb.a6be6ab7.js} | 2 +-
zh-CN/assets/js/992.32945d3b.js | 540 -
.../{9e4087bc.93101ad2.js => 9e4087bc.89e8c427.js} | 2 +-
zh-CN/assets/js/a4adfb7f.8a340492.js | 1 +
zh-CN/assets/js/a4adfb7f.adcbf3fb.js | 1 -
zh-CN/assets/js/a5b0ceb9.375a0e07.js | 1 -
zh-CN/assets/js/a5b0ceb9.5ef6dc45.js | 1 +
.../{a72448b0.942fdbb1.js => a72448b0.ff48a241.js} | 4 +-
...ICENSE.txt => a72448b0.ff48a241.js.LICENSE.txt} | 0
zh-CN/assets/js/bb350c59.f1c878a2.js | 1 +
zh-CN/assets/js/bb350c59.f9849bcb.js | 1 -
zh-CN/assets/js/c8c000df.f58e9952.js | 1 -
zh-CN/assets/js/c8c000df.fc78ad9b.js | 1 +
zh-CN/assets/js/ca3ced4f.12b5593f.js | 1 -
zh-CN/assets/js/ca3ced4f.fa80d89b.js | 1 +
zh-CN/assets/js/cb37bc33.acf84467.js | 1 -
zh-CN/assets/js/cb37bc33.db9b1f9e.js | 1 +
zh-CN/assets/js/d7ef3cd8.1655c1eb.js | 1 -
zh-CN/assets/js/d7ef3cd8.b1d3ac10.js | 1 +
zh-CN/assets/js/da6654f2.47ef426f.js | 1 -
zh-CN/assets/js/da6654f2.a730b11d.js | 1 +
zh-CN/assets/js/dc8b965f.4b223af7.js | 1 -
zh-CN/assets/js/dc8b965f.59cea4ec.js | 1 +
zh-CN/assets/js/e4ae456e.092e2c0e.js | 1 -
zh-CN/assets/js/e4ae456e.ac149a0e.js | 1 +
zh-CN/assets/js/eafd45de.70180bdc.js | 1 -
zh-CN/assets/js/eafd45de.e779f0da.js | 1 +
zh-CN/assets/js/f8a2828b.7f40145f.js | 1 +
zh-CN/assets/js/f8a2828b.a6a0757d.js | 1 -
zh-CN/assets/js/main.068c7d4c.js | 2 +
...js.LICENSE.txt => main.068c7d4c.js.LICENSE.txt} | 0
zh-CN/assets/js/main.bcdf1aeb.js | 2 -
zh-CN/assets/js/runtime~main.5c2bd1a1.js | 1 +
zh-CN/assets/js/runtime~main.63cb7c9c.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 +-
.../index.html | 7 +-
.../index.html | 7 +-
.../answer-1.2.1-ask-better-find-better/index.html | 7 +-
.../first-contribution-come-to-answer/index.html | 7 +-
.../blog/2024/01/26/deploy-answer-https/index.html | 7 +-
.../index.html | 7 +-
.../index.html | 7 +-
.../2024/02/20/answer-1.2.5-is-ready/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/security/index.html | 9 +-
zh-CN/community/translation/index.html | 9 +-
zh-CN/contact/index.html | 7 +-
zh-CN/docs/api/index.html | 9 +-
zh-CN/docs/command-line/index.html | 9 +-
zh-CN/docs/configfile/index.html | 9 +-
zh-CN/docs/contributing/notice/index.html | 9 +-
zh-CN/docs/database/index.html | 9 +-
zh-CN/docs/env/index.html | 9 +-
zh-CN/docs/faq/index.html | 9 +-
zh-CN/docs/flags/index.html | 9 +-
zh-CN/docs/index.html | 9 +-
zh-CN/docs/installation/index.html | 9 +-
zh-CN/docs/moderation/index.html | 9 +-
zh-CN/docs/permission/index.html | 9 +-
zh-CN/docs/plugins/index.html | 9 +-
zh-CN/docs/questions/index.html | 16 +-
zh-CN/docs/reputation/index.html | 9 +-
zh-CN/docs/review/index.html | 9 +-
zh-CN/docs/settings/index.html | 9 +-
zh-CN/docs/tags/index.html | 9 +-
zh-CN/docs/upgrade/index.html | 9 +-
zh-CN/docs/users/index.html | 15 +-
zh-CN/img/docs/questions-answer-status.drawio.svg | 173 +
.../img/docs/questions-question-status.drawio.svg | 226 +
zh-CN/img/docs/users-oauth.drawio.svg | 500 +
zh-CN/img/docs/users-signup.drawio.svg | 188 +
zh-CN/img/screenshot.png | Bin 61506 -> 88558 bytes
zh-CN/index.html | 7 +-
zh-CN/plugins/index.html | 7 +-
zh-CN/search/index.html | 7 +-
466 files changed, 5012 insertions(+), 509124 deletions(-)
diff --git a/404.html b/404.html
index 7bb02265..b7a5f54f 100644
--- a/404.html
+++ b/404.html
@@ -8,10 +8,9 @@
<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.2252c3e0.css">
-<script src="/assets/js/runtime~main.fd137039.js" defer="defer"></script>
-<script src="/assets/js/main.8ba0868c.js" defer="defer"></script>
+<link rel="stylesheet" href="/fonts/fonts.css"><link rel="stylesheet" href="/assets/css/styles.ed57e243.css">
+<script src="/assets/js/runtime~main.11e48caf.js" defer="defer"></script>
+<script src="/assets/js/main.01c4bcd3.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.2252c3e0.css b/assets/css/styles.ed57e243.css
similarity index 80%
rename from assets/css/styles.2252c3e0.css
rename to assets/css/styles.ed57e243.css
index 45f3fc23..d238b875 100644
--- a/assets/css/styles.2252c3e0.css
+++ b/assets/css/styles.ed57e243.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/images/questions-answer-status.drawio-c037079cbbf31ac37fdb578bb32a35c7.svg b/assets/images/questions-answer-status.drawio-c037079cbbf31ac37fdb578bb32a35c7.svg
new file mode 100644
index 00000000..53d3f9ab
--- /dev/null
+++ b/assets/images/questions-answer-status.drawio-c037079cbbf31ac37fdb578bb32a35c7.svg
@@ -0,0 +1,173 @@
+<svg host="65bd71144e" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="187px" height="422px" viewBox="-0.5 -0.5 187 422" content="<mxfile><diagram id="rdafppzy02LZrHV_124Y" name="Page-1">3VdNc5swEP01XD18GGMfHX+kl3Yy9WTanDoqbIBWIEbIBvrrK8ICIrJdT23HaU+wTytp9fbtCgxnkZT3nGTRRxYANWwzKA1nadi2ZVmefNRI1SCe4zRAyOMAnXpgE/8CBE1Et3EA+cBRMEZFnA1Bn6Up+GKAEc5ZMXR7ZnS4a0ZC0ICNT6iOfokDETXo1PZ6/APEYdTubE1mzUhCWmc8SR6RgBUK5K [...]
+ <defs/>
+ <g>
+ <path d="M 125 61 L 125 114.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+ <path d="M 125 119.88 L 121.5 112.88 L 125 114.63 L 128.5 112.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+ <ellipse cx="125" cy="31" rx="50" ry="30" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="2" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 31px; margin-left: 76px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+ Create
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="125" y="35" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
+ Create
+ </text>
+ </switch>
+ </g>
+ <path d="M 155 181 L 155 234.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+ <path d="M 155 239.88 L 151.5 232.88 L 155 234.63 L 158.5 232.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 211px; margin-left: 155px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
+ Approve
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="155" y="214" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">
+ Approve
+ </text>
+ </switch>
+ </g>
+ <path d="M 65 151 L 25 151 Q 15 151 15 161 L 15 381 Q 15 391 25 391 L 58.63 391" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+ <path d="M 63.88 391 L 56.88 394.5 L 58.63 391 L 56.88 387.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 271px; margin-left: 15px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
+ Reject
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="15" y="274" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">
+ Reject
+ </text>
+ </switch>
+ </g>
+ <rect x="65" y="121" width="120" height="60" rx="7" ry="7" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="2" stroke-dasharray="6 6" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 151px; margin-left: 66px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+ Pending
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="125" y="155" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
+ Pending
+ </text>
+ </switch>
+ </g>
+ <path d="M 155 301 L 155 354.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+ <path d="M 155 359.88 L 151.5 352.88 L 155 354.63 L 158.5 352.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 331px; margin-left: 155px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
+ ☑️ Delete
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="155" y="334" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">
+ ☑️ Delete
+ </text>
+ </switch>
+ </g>
+ <path d="M 95 241 L 95 187.37" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+ <path d="M 95 182.12 L 98.5 189.12 L 95 187.37 L 91.5 189.12 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 211px; margin-left: 95px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
+ Unapprove
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="95" y="214" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">
+ Unapprove
+ </text>
+ </switch>
+ </g>
+ <rect x="65" y="241" width="120" height="60" rx="7" ry="7" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="2" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 271px; margin-left: 66px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+ Normal
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="125" y="275" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
+ Normal
+ </text>
+ </switch>
+ </g>
+ <path d="M 95 361 L 95 307.37" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+ <path d="M 95 302.12 L 98.5 309.12 L 95 307.37 L 91.5 309.12 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 331px; margin-left: 95px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
+ Undelete
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="95" y="334" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">
+ Undelete
+ </text>
+ </switch>
+ </g>
+ <rect x="65" y="361" width="120" height="60" rx="7" ry="7" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="2" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 391px; margin-left: 66px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+ Deleted
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="125" y="395" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
+ Deleted
+ </text>
+ </switch>
+ </g>
+ </g>
+ <switch>
+ <g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/>
+ <a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank">
+ <text text-anchor="middle" font-size="10px" x="50%" y="100%">
+ Text is not SVG - cannot display
+ </text>
+ </a>
+ </switch>
+</svg>
diff --git a/assets/images/questions-question-status.drawio-ba8e6f72b87ff5452bcc4dd8cbdc7dea.svg b/assets/images/questions-question-status.drawio-ba8e6f72b87ff5452bcc4dd8cbdc7dea.svg
new file mode 100644
index 00000000..3a483cc2
--- /dev/null
+++ b/assets/images/questions-question-status.drawio-ba8e6f72b87ff5452bcc4dd8cbdc7dea.svg
@@ -0,0 +1,226 @@
+<svg host="65bd71144e" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="397px" height="422px" viewBox="-0.5 -0.5 397 422" content="<mxfile><diagram id="rdafppzy02LZrHV_124Y" name="Page-1">3VhNc5swEP01XDMIGWMfE8duL+1kkum0PXVUawO0AjFCtqG/vsKID0V2zIxt0vRk9rGS0NuntxgHL5LigyBZ9IlTYI7n0sLB947nIYQC9VMhZY0EGNdAKGKqkzrgKf4DGnQ1uokp5Eai5JzJODPBNU9TWEsDI0LwnZn2zJm5akZCsICnNWE2+jWmMqrRmRd0+EeIw6hZGU3n9Z2ENMl6J3lEKN/1IL [...]
+ <defs/>
+ <g>
+ <path d="M 125 61 L 125 114.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+ <path d="M 125 119.88 L 121.5 112.88 L 125 114.63 L 128.5 112.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+ <ellipse cx="125" cy="31" rx="50" ry="30" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="2" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 31px; margin-left: 76px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+ Create
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="125" y="35" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
+ Create
+ </text>
+ </switch>
+ </g>
+ <path d="M 155 181 L 155 234.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+ <path d="M 155 239.88 L 151.5 232.88 L 155 234.63 L 158.5 232.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 211px; margin-left: 155px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
+ Approve
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="155" y="214" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">
+ Approve
+ </text>
+ </switch>
+ </g>
+ <path d="M 65 151 L 25 151 Q 15 151 15 161 L 15 381 Q 15 391 25 391 L 58.63 391" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+ <path d="M 63.88 391 L 56.88 394.5 L 58.63 391 L 56.88 387.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 271px; margin-left: 15px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
+ Reject
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="15" y="274" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">
+ Reject
+ </text>
+ </switch>
+ </g>
+ <rect x="65" y="121" width="120" height="60" rx="7" ry="7" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="2" stroke-dasharray="6 6" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 151px; margin-left: 66px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+ Pending
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="125" y="155" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
+ Pending
+ </text>
+ </switch>
+ </g>
+ <path d="M 155 301 L 155 354.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+ <path d="M 155 359.88 L 151.5 352.88 L 155 354.63 L 158.5 352.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 331px; margin-left: 155px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
+ ☑️ Delete
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="155" y="334" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">
+ ☑️ Delete
+ </text>
+ </switch>
+ </g>
+ <path d="M 95 241 L 95 187.37" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+ <path d="M 95 182.12 L 98.5 189.12 L 95 187.37 L 91.5 189.12 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 211px; margin-left: 95px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
+ Unapprove
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="95" y="214" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">
+ Unapprove
+ </text>
+ </switch>
+ </g>
+ <path d="M 185 286 L 268.63 286" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+ <path d="M 273.88 286 L 266.88 289.5 L 268.63 286 L 266.88 282.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 286px; margin-left: 230px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
+ ☑️ Close
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="230" y="289" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">
+ ☑️ Close
+ </text>
+ </switch>
+ </g>
+ <rect x="65" y="241" width="120" height="60" rx="7" ry="7" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="2" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 271px; margin-left: 66px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+ Normal
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="125" y="275" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
+ Normal
+ </text>
+ </switch>
+ </g>
+ <path d="M 95 361 L 95 307.37" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+ <path d="M 95 302.12 L 98.5 309.12 L 95 307.37 L 91.5 309.12 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 331px; margin-left: 95px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
+ Undelete
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="95" y="334" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">
+ Undelete
+ </text>
+ </switch>
+ </g>
+ <rect x="65" y="361" width="120" height="60" rx="7" ry="7" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="2" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 391px; margin-left: 66px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+ Deleted
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="125" y="395" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
+ Deleted
+ </text>
+ </switch>
+ </g>
+ <path d="M 275 256 L 191.37 256" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+ <path d="M 186.12 256 L 193.12 252.5 L 191.37 256 L 193.12 259.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 256px; margin-left: 230px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
+ Reopen
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="230" y="259" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">
+ Reopen
+ </text>
+ </switch>
+ </g>
+ <rect x="275" y="241" width="120" height="60" rx="7" ry="7" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="2" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 271px; margin-left: 276px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+ Closed
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="335" y="275" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
+ Closed
+ </text>
+ </switch>
+ </g>
+ </g>
+ <switch>
+ <g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/>
+ <a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank">
+ <text text-anchor="middle" font-size="10px" x="50%" y="100%">
+ Text is not SVG - cannot display
+ </text>
+ </a>
+ </switch>
+</svg>
diff --git a/assets/images/screenshot-74a5a4658de6431b7c42f3bd3de532f9.png b/assets/images/screenshot-74a5a4658de6431b7c42f3bd3de532f9.png
deleted file mode 100644
index cbce3f2e..00000000
Binary files a/assets/images/screenshot-74a5a4658de6431b7c42f3bd3de532f9.png and /dev/null differ
diff --git a/assets/images/screenshot-c118d2fcfb1faaf1d9df2e8b5e8bc1a8.png b/assets/images/screenshot-c118d2fcfb1faaf1d9df2e8b5e8bc1a8.png
new file mode 100644
index 00000000..555de500
Binary files /dev/null and b/assets/images/screenshot-c118d2fcfb1faaf1d9df2e8b5e8bc1a8.png differ
diff --git a/assets/images/users-oauth.drawio-1bf9a76ad7f50a2b20755d20b739feea.svg b/assets/images/users-oauth.drawio-1bf9a76ad7f50a2b20755d20b739feea.svg
new file mode 100644
index 00000000..c4e6e7ea
--- /dev/null
+++ b/assets/images/users-oauth.drawio-1bf9a76ad7f50a2b20755d20b739feea.svg
@@ -0,0 +1,500 @@
+<svg host="65bd71144e" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="802px" height="792px" viewBox="-0.5 -0.5 802 792" content="<mxfile><diagram id="tPTqrfC_AW58oQTuRV51" name="Page-1">5VpLc6M4EP41vqYsxMM5Op5MZqtmdlOVw25OWxpQsGqw5BIitufXb8sI8xDOEA8GO3sy3RYIff31Qy0meLHaPkiyXn4TEU0mzjTaTvCnieMghAL40ZpdrgkwzhWxZJEZVCqe2E9qlFOjzVhE09pAJUSi2LquDAXnNFQ1HZFSbOrDXkRSn3VNYmopnkKS2Nq/WaSWuXbmBKX+C2XxspgZ+bf5PytSDD [...]
+ <defs/>
+ <g>
+ <path d="M 602 61 L 602 124.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+ <path d="M 602 129.88 L 598.5 122.88 L 602 124.63 L 605.5 122.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 96px; margin-left: 602px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
+ OAuth authorization
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="602" y="99" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">
+ OAuth authorization
+ </text>
+ </switch>
+ </g>
+ <path d="M 552 181 L 382 181 Q 372 181 372 191 L 372 214.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+ <path d="M 372 219.88 L 368.5 212.88 L 372 214.63 L 375.5 212.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 181px; margin-left: 442px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
+ No
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="442" y="184" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">
+ No
+ </text>
+ </switch>
+ </g>
+ <path d="M 652 181 L 782 181 Q 792 181 792 191 L 792 751 Q 792 761 782 761 L 658.37 761" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+ <path d="M 653.12 761 L 660.12 757.5 L 658.37 761 L 660.12 764.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 471px; margin-left: 792px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
+ Yes
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="792" y="474" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">
+ Yes
+ </text>
+ </switch>
+ </g>
+ <path d="M 602 131 L 652 181 L 602 231 L 552 181 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 181px; margin-left: 553px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+ Authorized
+ <br/>
+ record already exists
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="602" y="185" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
+ Authorized...
+ </text>
+ </switch>
+ </g>
+ <path d="M 422 271 L 512 271 Q 522 271 522 281 L 522 294.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+ <path d="M 522 299.88 L 518.5 292.88 L 522 294.63 L 525.5 292.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 271px; margin-left: 487px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
+ Yes
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="487" y="274" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">
+ Yes
+ </text>
+ </switch>
+ </g>
+ <path d="M 322 271 L 212 271 Q 202 271 202 281 L 202 314.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+ <path d="M 202 319.88 L 198.5 312.88 L 202 314.63 L 205.5 312.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 271px; margin-left: 237px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
+ No
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="237" y="274" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">
+ No
+ </text>
+ </switch>
+ </g>
+ <path d="M 372 221 L 422 271 L 372 321 L 322 271 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 271px; margin-left: 323px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+ Can get email
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="372" y="275" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
+ Can get email
+ </text>
+ </switch>
+ </g>
+ <path d="M 582.61 731 L 621.39 731 C 638.29 731 652 744.43 652 761 C 652 777.57 638.29 791 621.39 791 L 582.61 791 C 565.71 791 552 777.57 552 761 C 552 744.43 565.71 731 582.61 731 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 761px; margin-left: 553px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+ Login success
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="602" y="765" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
+ Login success
+ </text>
+ </switch>
+ </g>
+ <path d="M 472 351 L 258.37 351" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+ <path d="M 253.12 351 L 260.12 347.5 L 258.37 351 L 260.12 354.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 351px; margin-left: 362px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
+ Yes
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="362" y="354" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">
+ Yes
+ </text>
+ </switch>
+ </g>
+ <path d="M 572 351 L 592 351 Q 602 351 602 361 L 602 444.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+ <path d="M 602 449.88 L 598.5 442.88 L 602 444.63 L 605.5 442.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 386px; margin-left: 602px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
+ No
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="602" y="389" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">
+ No
+ </text>
+ </switch>
+ </g>
+ <path d="M 522 301 L 572 351 L 522 401 L 472 351 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 351px; margin-left: 473px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+ 3rd
+ <br/>
+ returned unverified
+ <br/>
+ email
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="522" y="355" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
+ 3rd...
+ </text>
+ </switch>
+ </g>
+ <path d="M 202 381 L 202 444.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+ <path d="M 202 449.88 L 198.5 442.88 L 202 444.63 L 205.5 442.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+ <rect x="152" y="321" width="100" height="60" rx="7" ry="7" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="2" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 351px; margin-left: 153px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+ Input email
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="202" y="355" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
+ Input email
+ </text>
+ </switch>
+ </g>
+ <path d="M 652 501 L 712 501 Q 722 501 722 511 L 722 554.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+ <path d="M 722 559.88 L 718.5 552.88 L 722 554.63 L 725.5 552.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 501px; margin-left: 717px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
+ No
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="717" y="504" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">
+ No
+ </text>
+ </switch>
+ </g>
+ <path d="M 552 501 L 492 501 Q 482 501 482 511 L 482 554.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+ <path d="M 482 559.88 L 478.5 552.88 L 482 554.63 L 485.5 552.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 501px; margin-left: 487px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
+ Yes
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="487" y="504" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">
+ Yes
+ </text>
+ </switch>
+ </g>
+ <path d="M 602 451 L 652 501 L 602 551 L 552 501 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 501px; margin-left: 553px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+ Email
+ <br/>
+ already
+ <br/>
+ exists
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="602" y="505" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
+ Email...
+ </text>
+ </switch>
+ </g>
+ <path d="M 722 621 L 722 666 Q 722 676 712 676 L 612 676 Q 602 676 602 686 L 602 724.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+ <path d="M 602 729.88 L 598.5 722.88 L 602 724.63 L 605.5 722.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+ <rect x="672" y="561" width="100" height="60" rx="7" ry="7" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="2" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 591px; margin-left: 673px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+ Create new account
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="722" y="595" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
+ Create new accou...
+ </text>
+ </switch>
+ </g>
+ <path d="M 482 621 L 482 666 Q 482 676 492 676 L 592 676 Q 602 676 602 686 L 602 724.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+ <path d="M 602 729.88 L 598.5 722.88 L 602 724.63 L 605.5 722.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+ <rect x="432" y="561" width="100" height="60" rx="7" ry="7" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="2" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 591px; margin-left: 433px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+ Connect to existing account
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="482" y="595" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
+ Connect to exist...
+ </text>
+ </switch>
+ </g>
+ <path d="M 152 501 L 102 501 Q 92 501 92 511 L 92 534.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+ <path d="M 92 539.88 L 88.5 532.88 L 92 534.63 L 95.5 532.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 501px; margin-left: 102px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
+ Yes
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="102" y="504" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">
+ Yes
+ </text>
+ </switch>
+ </g>
+ <path d="M 252 501 L 302 501 Q 312 501 312 511 L 312 554.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+ <path d="M 312 559.88 L 308.5 552.88 L 312 554.63 L 315.5 552.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 501px; margin-left: 312px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
+ No
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="312" y="504" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">
+ No
+ </text>
+ </switch>
+ </g>
+ <path d="M 202 451 L 252 501 L 202 551 L 152 501 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 501px; margin-left: 153px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+ Email
+ <br/>
+ already
+ <br/>
+ exists
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="202" y="505" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
+ Email...
+ </text>
+ </switch>
+ </g>
+ <path d="M 202 711 L 202 751 Q 202 761 212 761 L 545.63 761" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+ <path d="M 550.88 761 L 543.88 764.5 L 545.63 761 L 543.88 757.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+ <rect x="152" y="651" width="100" height="60" rx="7" ry="7" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="2" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 681px; margin-left: 153px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+ Activate
+ <br/>
+ via email
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="202" y="685" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
+ Activate...
+ </text>
+ </switch>
+ </g>
+ <path d="M 312 621 L 312 671 Q 312 681 302 681 L 258.37 681" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+ <path d="M 253.12 681 L 260.12 677.5 L 258.37 681 L 260.12 684.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+ <rect x="262" y="561" width="100" height="60" rx="7" ry="7" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="2" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 591px; margin-left: 263px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+ Create new account
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="312" y="595" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
+ Create new accou...
+ </text>
+ </switch>
+ </g>
+ <path d="M 92 641 L 92 671 Q 92 681 102 681 L 145.63 681" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+ <path d="M 150.88 681 L 143.88 684.5 L 145.63 681 L 143.88 677.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 681px; margin-left: 102px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
+ Yes
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="102" y="684" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">
+ Yes
+ </text>
+ </switch>
+ </g>
+ <path d="M 42 591 L 37 591 Q 32 591 32 581 L 32 361 Q 32 351 42 351 L 145.63 351" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/>
+ <path d="M 150.88 351 L 143.88 354.5 L 145.63 351 L 143.88 347.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 416px; margin-left: 32px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
+ No,
+ <br/>
+ change email
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="32" y="419" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">
+ No,...
+ </text>
+ </switch>
+ </g>
+ <path d="M 92 541 L 142 591 L 92 641 L 42 591 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 591px; margin-left: 43px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+ Connect
+ <br/>
+ to existing
+ <br/>
+ account
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="92" y="595" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
+ Connect...
+ </text>
+ </switch>
+ </g>
+ <ellipse cx="602" cy="31" rx="50" ry="30" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="2" pointer-events="all"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 31px; margin-left: 553px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
+ Login
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="602" y="35" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
+ Login
+ </text>
+ </switch>
+ </g>
+ </g>
+ <switch>
+ <g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/>
+ <a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank">
+ <text text-anchor="middle" font-size="10px" x="50%" y="100%">
+ Text is not SVG - cannot display
+ </text>
+ </a>
+ </switch>
+</svg>
diff --git a/assets/images/users-signup.drawio-71d1d02e80eeaa95c58a30d2451df863.svg b/assets/images/users-signup.drawio-71d1d02e80eeaa95c58a30d2451df863.svg
new file mode 100644
index 00000000..cb29ca16
--- /dev/null
+++ b/assets/images/users-signup.drawio-71d1d02e80eeaa95c58a30d2451df863.svg
@@ -0,0 +1,188 @@
+<svg host="65bd71144e" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="601px" height="431px" viewBox="-0.5 -0.5 601 431" content="<mxfile><diagram id="RegsoFfogUOMrwS3RCim" name="Page-1">3Zhdb5swFIZ/TW6jgANJL/u9XWyaFGlbryYXTsCqwZFtCtmv33EwAeIma9ouRLtJfF7bYD+cD8OIXGfVvaSr9IuIgY/8SVyNyM3I9z3Pm+GfUda1MiOkFhLJYjuoFRbsN1hxYtWCxaB6A7UQXLNVX4xEnkOkexqVUpT9YUvB+3dd0QQcYRFR7qo/WKzTWp37s1b/BCxJmzt74UXdk9FmsN2JSmksyo [...]
+ <defs/>
+ <g>
+ <path d="M 0 23 L 0 0 L 200 0 L 200 23" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
+ <path d="M 0 23 L 0 430 L 200 430 L 200 23" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/>
+ <path d="M 0 23 L 200 23" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 12px; margin-left: 1px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;">
+ Guest
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="100" y="15" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle" font-weight="bold">
+ Guest
+ </text>
+ </switch>
+ </g>
+ <ellipse cx="100" cy="80" rx="50" ry="30" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="2" pointer-events="none"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 80px; margin-left: 51px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">
+ Sign up
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="100" y="84" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
+ Sign up
+ </text>
+ </switch>
+ </g>
+ <path d="M 200 23 L 200 0 L 400 0 L 400 23" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/>
+ <path d="M 200 23 L 200 430 L 400 430 L 400 23" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/>
+ <path d="M 200 23 L 400 23" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 12px; margin-left: 201px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;">
+ Inactive user
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="300" y="15" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle" font-weight="bold">
+ Inactive user
+ </text>
+ </switch>
+ </g>
+ <rect x="250" y="240" width="100" height="60" rx="7" ry="7" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="2" pointer-events="none"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 270px; margin-left: 251px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">
+ Visit
+ <br/>
+ activation link
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="300" y="274" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
+ Visit...
+ </text>
+ </switch>
+ </g>
+ <rect x="250" y="140" width="100" height="60" rx="7" ry="7" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="2" pointer-events="none"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 170px; margin-left: 251px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">
+ Send confirm
+ <br/>
+ email
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="300" y="174" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
+ Send confirm...
+ </text>
+ </switch>
+ </g>
+ <path d="M 300 200 L 300 233.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/>
+ <path d="M 300 238.88 L 296.5 231.88 L 300 233.63 L 303.5 231.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/>
+ <path d="M 400 23 L 400 0 L 600 0 L 600 23" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/>
+ <path d="M 400 23 L 400 430 L 600 430 L 600 23" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/>
+ <path d="M 400 23 L 600 23" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 12px; margin-left: 401px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; overflow-wrap: normal;">
+ Normal user
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="500" y="15" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle" font-weight="bold">
+ Normal user
+ </text>
+ </switch>
+ </g>
+ <rect x="450" y="240" width="100" height="60" rx="7" ry="7" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="2" pointer-events="none"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 270px; margin-left: 451px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">
+ Active
+ <br/>
+ successful
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="500" y="274" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
+ Active...
+ </text>
+ </switch>
+ </g>
+ <path d="M 100 110 L 100 133.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/>
+ <path d="M 100 138.88 L 96.5 131.88 L 100 133.63 L 103.5 131.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/>
+ <path d="M 150 170 L 243.63 170" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/>
+ <path d="M 248.88 170 L 241.88 173.5 L 243.63 170 L 241.88 166.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/>
+ <rect x="50" y="140" width="100" height="60" rx="7" ry="7" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="2" pointer-events="none"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 170px; margin-left: 51px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">
+ Fill sign up form
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="100" y="174" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
+ Fill sign up form
+ </text>
+ </switch>
+ </g>
+ <path d="M 350 270 L 443.63 270" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/>
+ <path d="M 448.88 270 L 441.88 273.5 L 443.63 270 L 441.88 266.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/>
+ <path d="M 480.61 340 L 519.39 340 C 536.29 340 550 353.43 550 370 C 550 386.57 536.29 400 519.39 400 L 480.61 400 C 463.71 400 450 386.57 450 370 C 450 353.43 463.71 340 480.61 340 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="2" stroke-miterlimit="10" pointer-events="none"/>
+ <g transform="translate(-0.5 -0.5)">
+ <switch>
+ <foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
+ <div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 370px; margin-left: 451px;">
+ <div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
+ <div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">
+ End
+ </div>
+ </div>
+ </div>
+ </foreignObject>
+ <text x="500" y="374" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
+ End
+ </text>
+ </switch>
+ </g>
+ <path d="M 500 300 L 500 333.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/>
+ <path d="M 500 338.88 L 496.5 331.88 L 500 333.63 L 503.5 331.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/>
+ </g>
+ <switch>
+ <g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/>
+ <a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank">
+ <text text-anchor="middle" font-size="10px" x="50%" y="100%">
+ Text is not SVG - cannot display
+ </text>
+ </a>
+ </switch>
+</svg>
diff --git a/zh-CN/assets/js/01a85c17.6709a49d.js b/assets/js/01a85c17.ea1681f0.js
similarity index 97%
rename from zh-CN/assets/js/01a85c17.6709a49d.js
rename to assets/js/01a85c17.ea1681f0.js
index cea68ec3..00f56472 100644
--- a/zh-CN/assets/js/01a85c17.6709a49d.js
+++ b/assets/js/01a85c17.ea1681f0.js
@@ -1 +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
+"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(70647),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/0480b142.04edd1ae.js b/assets/js/0480b142.04edd1ae.js
deleted file mode 100644
index bedcaa3d..00000000
--- a/assets/js/0480b142.04edd1ae.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:()=>r,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>l});var a=n(43010),s=n(90887);const i={slug:"/faq"},r="FAQ",o={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/0480b142.c96108ee.js b/assets/js/0480b142.c96108ee.js
new file mode 100644
index 00000000..0a711feb
--- /dev/null
+++ b/assets/js/0480b142.c96108ee.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/1008.647e7b10.js b/assets/js/1008.647e7b10.js
deleted file mode 100644
index b6aebbb9..00000000
--- a/assets/js/1008.647e7b10.js
+++ /dev/null
@@ -1 +0,0 @@
-"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.4180c433.js b/assets/js/1061.559c3c1d.js
similarity index 94%
rename from assets/js/1061.4180c433.js
rename to assets/js/1061.559c3c1d.js
index a236ec0a..f28108f4 100644
--- a/assets/js/1061.4180c433.js
+++ b/assets/js/1061.559c3c1d.js
@@ -1 +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
+"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/1300.4c852510.js b/assets/js/1300.4c852510.js
deleted file mode 100644
index 4a4d6dc3..00000000
--- a/assets/js/1300.4c852510.js
+++ /dev/null
@@ -1 +0,0 @@
-"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/1516.94768e46.js b/assets/js/1516.94768e46.js
deleted file mode 100644
index 4ebc32a7..00000000
--- a/assets/js/1516.94768e46.js
+++ /dev/null
@@ -1 +0,0 @@
-"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.01a7e12a.js b/assets/js/1620c6a0.01a7e12a.js
deleted file mode 100644
index a52df8c4..00000000
--- a/assets/js/1620c6a0.01a7e12a.js
+++ /dev/null
@@ -1 +0,0 @@
-"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/1620c6a0.203cc2ba.js b/assets/js/1620c6a0.203cc2ba.js
new file mode 100644
index 00000000..f96f317b
--- /dev/null
+++ b/assets/js/1620c6a0.203cc2ba.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/1711.136f6393.js b/assets/js/1711.136f6393.js
deleted file mode 100644
index 28685434..00000000
--- a/assets/js/1711.136f6393.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/*! 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
deleted file mode 100644
index b7611cc4..00000000
--- a/assets/js/1711.136f6393.js.LICENSE.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-/*!
- * 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/zh-CN/assets/js/17896441.8c9963e3.js b/assets/js/17896441.08e62453.js
similarity index 99%
rename from zh-CN/assets/js/17896441.8c9963e3.js
rename to assets/js/17896441.08e62453.js
index 139e4ae8..d071edad 100644
--- a/zh-CN/assets/js/17896441.8c9963e3.js
+++ b/assets/js/17896441.08e62453.js
@@ -1 +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
+"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/1a4e3797.43bebe37.js b/assets/js/1a4e3797.c608bffb.js
similarity index 99%
rename from assets/js/1a4e3797.43bebe37.js
rename to assets/js/1a4e3797.c608bffb.js
index 51ec8405..e04d0fd4 100644
--- a/assets/js/1a4e3797.43bebe37.js
+++ b/assets/js/1a4e3797.c608bffb.js
@@ -1,2 +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
+/*! For license information please see 1a4e3797.c608bffb.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.43bebe37.js.LICENSE.txt b/assets/js/1a4e3797.c608bffb.js.LICENSE.txt
similarity index 100%
rename from assets/js/1a4e3797.43bebe37.js.LICENSE.txt
rename to assets/js/1a4e3797.c608bffb.js.LICENSE.txt
diff --git a/assets/js/1a8837ce.03d18650.js b/assets/js/1a8837ce.03d18650.js
new file mode 100644
index 00000000..6adbe746
--- /dev/null
+++ b/assets/js/1a8837ce.03d18650.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:()=>u,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.99fcbdac.js b/assets/js/1a8837ce.99fcbdac.js
deleted file mode 100644
index 86aaa80d..00000000
--- a/assets/js/1a8837ce.99fcbdac.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:()=>u,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/zh-CN/assets/js/1df93b7f.c530523d.js b/assets/js/1df93b7f.a5074a14.js
similarity index 99%
rename from zh-CN/assets/js/1df93b7f.c530523d.js
rename to assets/js/1df93b7f.a5074a14.js
index d264a3c6..3a187719 100644
--- a/zh-CN/assets/js/1df93b7f.c530523d.js
+++ b/assets/js/1df93b7f.a5074a14.js
@@ -1 +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
+"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(70647),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/227.646ebd22.js b/assets/js/227.646ebd22.js
deleted file mode 100644
index d0e7a3e3..00000000
--- a/assets/js/227.646ebd22.js
+++ /dev/null
@@ -1 +0,0 @@
-"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
deleted file mode 100644
index 133836a0..00000000
--- a/assets/js/2449.f473e051.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/*! 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
deleted file mode 100644
index a58daed4..00000000
--- a/assets/js/2449.f473e051.js.LICENSE.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- 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
deleted file mode 100644
index fe60f86d..00000000
--- a/assets/js/2669.67104145.js
+++ /dev/null
@@ -1 +0,0 @@
-"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
deleted file mode 100644
index 8a1ece0b..00000000
--- a/assets/js/2697.7e8d8a38.js
+++ /dev/null
@@ -1 +0,0 @@
-"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/298.f8893466.js b/assets/js/298.f8893466.js
deleted file mode 100644
index f3c46eda..00000000
--- a/assets/js/298.f8893466.js
+++ /dev/null
@@ -1 +0,0 @@
-"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/2a510483.54691518.js b/assets/js/2a510483.54691518.js
new file mode 100644
index 00000000..b55330e8
--- /dev/null
+++ b/assets/js/2a510483.54691518.js
@@ -0,0 +1,2 @@
+/*! For license information please see 2a510483.54691518.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.7b977ab9.js.LICENSE.txt b/assets/js/2a510483.54691518.js.LICENSE.txt
similarity index 100%
rename from assets/js/2a510483.7b977ab9.js.LICENSE.txt
rename to assets/js/2a510483.54691518.js.LICENSE.txt
diff --git a/assets/js/2a510483.7b977ab9.js b/assets/js/2a510483.7b977ab9.js
deleted file mode 100644
index f92a8bcd..00000000
--- a/assets/js/2a510483.7b977ab9.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/*! For license information please see 2a510483.7b977ab9.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/zh-CN/assets/js/2c22be1c.09cb293a.js b/assets/js/2c22be1c.615af791.js
similarity index 99%
rename from zh-CN/assets/js/2c22be1c.09cb293a.js
rename to assets/js/2c22be1c.615af791.js
index d0f8a4c8..1978e0b4 100644
--- a/zh-CN/assets/js/2c22be1c.09cb293a.js
+++ b/assets/js/2c22be1c.615af791.js
@@ -1,2 +1,2 @@
-/*! For license information please see 2c22be1c.09cb293a.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 d={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
+/*! For license information please see 2c22be1c.615af791.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 d={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.09cb293a.js.LICENSE.txt b/assets/js/2c22be1c.615af791.js.LICENSE.txt
similarity index 100%
rename from assets/js/2c22be1c.09cb293a.js.LICENSE.txt
rename to assets/js/2c22be1c.615af791.js.LICENSE.txt
diff --git a/assets/js/3093.33e255c3.js b/assets/js/3093.33e255c3.js
deleted file mode 100644
index abd8b62e..00000000
--- a/assets/js/3093.33e255c3.js
+++ /dev/null
@@ -1 +0,0 @@
-"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
deleted file mode 100644
index 7eb61a13..00000000
--- a/assets/js/310.14ee915c.js
+++ /dev/null
@@ -1,3429 +0,0 @@
-"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/3198.6f9adc87.js b/assets/js/3198.6f9adc87.js
deleted file mode 100644
index bcc8125d..00000000
--- a/assets/js/3198.6f9adc87.js
+++ /dev/null
@@ -1 +0,0 @@
-"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
deleted file mode 100644
index acdea9a8..00000000
--- a/assets/js/32.97fad14b.js
+++ /dev/null
@@ -1,10780 +0,0 @@
-"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
-
... 508918 lines suppressed ...